与Java日历和时区混淆
考虑以下代码片段与Java日历和时区混淆,java,Java,考虑以下代码片段 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()); Syst
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
编辑。。。
那么我怎样才能得到以下信息呢
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
该函数返回日期,当转换为字符串时,日期对象将使用默认时区表示
因此,通过使用getTime,您将获得一个不再包含时区数据的日期对象,而日期只是一个特定的时间点。然后,该日期对象在打印时被隐式转换为字符串。该函数返回一个字符串,当转换为字符串时,日期对象使用默认时区表示
因此,通过使用getTime,您将获得一个不再包含时区数据的日期对象,而日期只是一个特定的时间点。然后,该日期对象在打印时隐式转换为字符串。Java文档清楚地说明了方法: 公共静态日历实例 获取使用默认时区和区域设置的日历。返回的日历基于默认时区中具有默认区域设置的当前时间
emphasis mineJava文档明确说明了方法: 公共静态日历实例 获取使用默认时区和区域设置的日历。返回的日历基于默认时区中具有默认区域设置的当前时间
emphasis mine如果您使用Java 8,您可能会希望使用它。如果您使用Java 8,您可能会希望使用它。@TryCatch您的意思是如何让它以您期望的方式工作?我将研究使用SimpleDataFormat类,这里有一个相关的问题:@TryCatch您的意思是如何让它按照您的预期工作?我将研究使用SimpleDataFormat类,这里有一个相关的问题:
Mon Jul 13 23:00:40 EDT 2015
19:0:327