Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Java日历和时区混淆_Java - Fatal编程技术网

与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 mine

Java文档明确说明了方法:

公共静态日历实例 获取使用默认时区和区域设置的日历。返回的日历基于默认时区中具有默认区域设置的当前时间


emphasis mine

如果您使用Java 8,您可能会希望使用它。如果您使用Java 8,您可能会希望使用它。@TryCatch您的意思是如何让它以您期望的方式工作?我将研究使用SimpleDataFormat类,这里有一个相关的问题:@TryCatch您的意思是如何让它按照您的预期工作?我将研究使用SimpleDataFormat类,这里有一个相关的问题:
Mon Jul 13 23:00:40 EDT 2015
19:0:327