Java Calendar.getInstance(TimeZone.getTimeZone(“UTC”)未返回UTC时间
我对使用Java Calendar.getInstance(TimeZone.getTimeZone(“UTC”)未返回UTC时间,java,Java,我对使用Calendar.getInstance(TimeZone.getTimeZone(“UTC”))method调用得到的结果感到非常困惑,它返回的是IST时间 这是我使用的代码 Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC")); System.out.println(cal_Two.getTime()); 我得到的答复是: Sat Jan 25 15:44:18 IST 2014 所以我试着将默认
Calendar.getInstance(TimeZone.getTimeZone(“UTC”))
method调用得到的结果感到非常困惑,它返回的是IST时间
这是我使用的代码
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
我得到的答复是:
Sat Jan 25 15:44:18 IST 2014
所以我试着将默认时区改为UTC,然后我检查了一下,然后它工作正常
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
TimeZone tz = TimeZone.getDefault() ;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
TimeZone.setDefault(tz);
结果:
Sat Jan 25 16:09:11 IST 2014
Sat Jan 25 10:39:11 UTC 2014
我在这里遗漏了什么吗?调用
System.out.println(cal_Two.getTime())
会从getTime()返回一个日期。它是将转换为println
字符串的Date
,该转换将在您的情况下使用默认的IST
时区
您需要显式使用DateFormat.setTimeZone()
在所需时区打印Date
编辑:礼貌的@ Laurynas,考虑这个:
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("EE MMM dd HH:mm:ss zzz yyyy", Locale.US);
simpleDateFormat.setTimeZone(timeZone);
System.out.println("Time zone: " + timeZone.getID());
System.out.println("default time zone: " + TimeZone.getDefault().getID());
System.out.println();
System.out.println("UTC: " + simpleDateFormat.format(calendar.getTime()));
System.out.println("Default: " + calendar.getTime());
尝试使用GMT
而不是UTC
。它们指的是同一时区,但名称GMT
更为常见,可能会起作用。java.util.Date
独立于时区。当您打印cal\u Two
时,尽管日历
实例已将其时区设置为UTC
,cal\u Two.getTime()
将返回一个没有时区(且始终处于默认时区)的日期
实例
输出:
Sat Jan 25 16:40:28 IST 2014
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Sat Jan 25 11:15:29 UTC 2014
Sat Jan 25 11:15:29 UTC 2014
从TimeZone.setDefault()的javadoc
设置getDefault方法返回的时区。中频区
如果为null,则将默认值重置为VM启动时的初始值
首先开始
因此,在实例化cal\u Two
之前移动setDefault()
,您将得到正确的结果
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
输出:
Sat Jan 25 16:40:28 IST 2014
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Sat Jan 25 11:15:29 UTC 2014
Sat Jan 25 11:15:29 UTC 2014
他在为我工作
如果您想查看时区列表,以下是代码
您肯定错过了一件小事,那就是您没有设置默认值:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
所以代码看起来像:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
解释:如果要更改时区,请使用时区设置默认时区。setDefault()
它对我有效
获取时间戳类型:
public static Timestamp getCurrentTimestamp() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
final Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
Timestamp ts = new Timestamp(date.getTime());
return ts;
}
获取字符串类型:
public static String getCurrentTimestamp() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
final Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
Timestamp ts = new Timestamp(date.getTime());
return ts.toString();
}
我已经找了一会儿了。也许标题不够明确?顺便说一句,谢谢你的帮助如果你显示System.out.println:)的结果,你可以节省很多时间。我明白了。。谢谢但我不明白SimpleDataFormat类如何负责设置时区。更改时区会更改实际时间,而不是其格式。SimpleDateFormat的工作只是格式化日期,而不是操纵时间……完美的答案!!这(必须设置格式化程序的时区)每次都会让我感到困惑,即使我设置了日历的时区。使用GMT也会产生相同的结果。
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
public static Timestamp getCurrentTimestamp() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
final Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
Timestamp ts = new Timestamp(date.getTime());
return ts;
}
public static String getCurrentTimestamp() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
final Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
Timestamp ts = new Timestamp(date.getTime());
return ts.toString();
}