有人可以向我解释为什么当我尝试获取一个与我自己的时区不同的DateTime的毫秒数时,为什么还给我本机所在时区的毫秒数?我希望获取UTC的毫秒数,但是我在应用程序中的本地设置已设置为EST(即使我实际上在爱尔兰;))
这里是代码:
DateTimeFormatter format = DateTimeFormat.mediumDateTime();
DateTime local = new DateTime();
DateTime utc = new DateTime(System.currentTimeMillis(), DateTimeZone.UTC);
System.out.println("utc zone = " +utc.getZone());
System.out.println("UTC time: " + utc);
long current = utc.getMillis();
System.out.println("current: " + format.print(current));
System.out.println("local: " + format.print(local.getMillis()));
这里是打印内容:
utc zone = UTC
UTC time: 2013-08-16T13:36:32.444Z
current: Aug 16, 2013 9:36:32 AM
local: Aug 16, 2013 9:36:32 AM
当前,我以为它应该与UTC时间具有相同的日期时间?
几点:
System.currentTimeMillis()
。只需通过此: DateTime utc = new DateTime(DateTimeZone.UTC);
[当您呼叫.getMillis()
时,结果在UTC中为always。将时间表示为不基于UTC的整数是一个坏主意,而不是Joda Time会提供的东西。您对毫秒数受本地时区影响的评估不正确。
转换错误是由于您如何调用format.print
而引起的。传递整数时,默认行为是使用当前时区,即您的本地时间。您可以像这样更改它:
format.withZone(DateTimeZone.UTC).print(current)
DateTime
,则其时区信息将自动应用。 format.print(utc)
format.print(local)
放在一起,整个事情看起来像这样:
DateTime local = new DateTime();
DateTime utc = new DateTime(DateTimeZone.UTC);
System.out.println("local zone = " + local.getZone());
System.out.println(" utc zone = " + utc.getZone());
DateTimeFormatter format = DateTimeFormat.mediumDateTime();
System.out.println(" local: " + format.print(local));
System.out.println(" utc: " + format.print(utc));
System.out.println("millis: " + utc.getMillis());