Search code examples
javadatesimpledateformat

How to print UTC or GMT using SimpleDateFormat?


I am trying to print a date in this format:

2023-01-11 09:25:52 UTC

But when I use date format:

yyyy-MM-dd HH:mm:ss Z

I get:

2023-01-11 09:29:25 +0100

While searching by existing question in stack overflow, I found similar questions but not with this exact format with "UTC" at the end. I found one that provided a solution to add the format as yyyy-MM-dd HH:mm:ss 'UTC' but then it would force the a GMT value to wrongly show UTC at the end.

Most of the answers explain how to get UTC value, but not how to print in this format

2023-01-11 09:25:52 UTC

Some solutions were also suggesting to use something else than SimpleDateFormat.

This question was marked as duplicated, but none of the post that were supposed to be duplicated had the info that I wanted.


Solution

  • Use a lowercase z instead of Z to get the offset instead of the id. And you have to set the time zone using simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")).

    Example:

    Date date = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    System.out.println(simpleDateFormat.format(date)); // 2023-01-11 08:41:17 UTC