我需要获得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。帮助我解决我的问题。
答案 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.Date
和java.util.Calendar
的时间。这两种选择都会导致很多更清晰的代码很多更容易阅读和推理。如果您试图避免一次性将Joda Time带入构建过程,请根据您的时间量进行权衡。 #39;可能会花费维护你的代码。或者只是更新到Java 8 ......无论如何,Java 7将不再支持免费更新...)