System.currentTimeMillis()不显示UTC时间,而是显示当前时区时间

时间:2015-02-26 07:03:16

标签: java

我需要获得UTC时间,因此在很多地方使用下面的代码来计算utc时间。

System.currentTimeMillis() ;
IST in IST - (GMT + 5:30),System.currentTimeMillis() - 应显示UTC时间(IST-5:30),而不是当前时间(GMT + 5:30)。 我不想使用joda日期和时间api的Apache。我想使用Java api itslef。帮助我解决我的问题。

1 个答案:

答案 0 :(得分:5)

System.currentTimeMillis()只返回long - 不是任何种类的日期格式。

如果你真的在使用:

Date date = new Date(System.currentTimeMillis());
System.out.println(date);

然后您只是看到Date.toString()的结果,它始终使用系统默认时区。

使用DateFormat(例如SimpleDateFormat)指定您要使用的日历系统(通常为Gregorian),时区和格式。例如:

Date date = ...;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",
                                         Locale.US);
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

String result = format.format(date);

顺便说一句,我强烈 在一个案例中使用System.currentTimeMillis()(或等效地,仅new Date())实现的接口,但实现测试目的,您可以随意设置和更新。然后注入这个"时钟"接口到任何需要访问当前日期/时间的东西。它使很多更容易测试基于时间的组件。

(如果可能的话,我强烈建议使用Joda Time或Java 8中的java.time包。我知道你说过你不想,但我怀疑是因为你没有像我们中的一些人一样花费java.util.Datejava.util.Calendar的时间。这两种选择都会导致很多更清晰的代码很多更容易阅读和推理。如果您试图避免一次性将Joda Time带入构建过程,请根据您的时间量进行权衡。 #39;可能会花费维护你的代码。或者只是更新到Java 8 ......无论如何,Java 7将不再支持免费更新...)