【发布时间】:2015-10-02 06:55:17
【问题描述】:
考虑以下代码片段...
import java.util.Calendar;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c.getTimeZone().getDisplayName());
System.out.println(c.getTime());
System.out.println(c.get(Calendar.HOUR_OF_DAY));
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
System.out.println(gmtCal.getTimeZone().getDisplayName());
System.out.println(gmtCal.getTime());
System.out.println(gmtCal.get(Calendar.HOUR_OF_DAY));
Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("US/Alaska"));
System.out.println(c2.getTimeZone().getDisplayName());
System.out.println(c2.getTime());
System.out.println(c2.get(Calendar.HOUR_OF_DAY));
}
}
这个程序的输出是
Eastern Standard Time
Mon Jul 13 16:10:14 EDT 2015
16
Greenwich Mean Time
Mon Jul 13 16:10:14 EDT 2015 //<--- also not sure why this isn't 4 hours ahead as Eastern time is UTC/GMT - 4 right now due to DST
20
Alaska Standard Time
Mon Jul 13 16:10:14 EDT 2015 //<--- date is not reflecting correct time and is showing EDT versus AST
12
为什么get(Calendar.HOUR_OF_DAY) 方法调用与getTime() 方法调用中的小时不匹配?换一种说法,为什么这不是输出?
Eastern Standard Time
Mon Jul 13 16:10:14 EDT 2015
16
Greenwich Mean Time
Mon Jul 13 20:10:14 GMT 2015
20
Alaska Standard Time
Mon Jul 13 12:10:14 AST 2015
12
编辑... 那么我怎样才能得到以下内容
long t = 1436842840327L;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(t);
c.setTimeZone(TimeZone.getTimeZone("US/Alaska"));
System.out.println(c.getTime());
System.out.println(c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.MILLISECOND));
打印与getTime() 相同的小时?当前的输出是
Mon Jul 13 23:00:40 EDT 2015
19:0:327
【问题讨论】:
-
如果您使用
Java 8,您可能希望改用LocalDateTime。
标签: java