【发布时间】:2011-01-06 13:37:57
【问题描述】:
由于其他原因,我有一个程序需要在我的本地时区下运行,但对于一个过程,我需要在 GMT 中使用 SimpleDateFormat 输出日期。
最整洁的方法是什么?
【问题讨论】:
由于其他原因,我有一个程序需要在我的本地时区下运行,但对于一个过程,我需要在 GMT 中使用 SimpleDateFormat 输出日期。
最整洁的方法是什么?
【问题讨论】:
使用standard API:
Instant now = Instant.now();
String result = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
.withZone(ZoneId.of("GMT"))
.format(now);
System.out.println(result);
新的DateTimeFormatter 实例是不可变的,可以用作静态变量。
使用旧的标准 API:
TimeZone gmt = TimeZone.getTimeZone("GMT");
DateFormat formatter = DateFormat.getTimeInstance(DateFormat.LONG);
formatter.setTimeZone(gmt);
System.out.println(formatter.format(new Date()));
【讨论】:
鉴于SimpleDateFormat 不是线程安全的,我想说最简洁的方法是改用Joda Time。然后你可以创建一个格式化程序(调用withZone(DateTimeZones.UTC) 来指定你想要UTC)然后你就离开了:
private static DateTimeFormatter formatter = DateTimeFormat.forPattern(...)
.withZone(DateTimeZone.UTC);
...
String result = formatter.print(instant);
这还有一个好处,就是您可以在代码的其他地方使用 Joda Time,这总是是件好事 :)
【讨论】:
DateFormat,那很好。不过,我个人更喜欢 Joda Time 方法 - 哎呀,部分原因是 Joda Time 只是一个更好的 API。