Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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日历设置为特定的UTC时间?_Java_Calendar - Fatal编程技术网

如何将Java日历设置为特定的UTC时间?

如何将Java日历设置为特定的UTC时间?,java,calendar,Java,Calendar,当我这样做时: Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC")); c.set(9999, 11, 31, 0, 0, 0); SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.SSSSSSSSS a"); String date = formatter.format(c.getTime()); assertEquals("31-D

当我这样做时:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
c.set(9999, 11, 31, 0, 0, 0);
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.SSSSSSSSS a");
String date = formatter.format(c.getTime());
assertEquals("31-Dec-99 00.00.00.000000000 AM", date);
我得到这个:1999年12月30日18.00.00.000000318下午

如何获得所需的时间?

在执行格式之前,您还需要设置

formatter.setTimeZone(c.getTimeZone());
否则,它将使用平台默认时区


与具体问题无关日历不支持纳秒,因此在格式化后,该部分可能仍然有点不正确。

在执行格式化之前,您还需要设置

formatter.setTimeZone(c.getTimeZone());
否则,它将使用平台默认时区



与具体问题无关日历不支持纳秒,因此在格式化后该部分可能仍然有点不正确。

您正在创建一个
SimpleDataFormatter
,但没有指定时区-因此默认情况下它将使用系统本地时区。如果希望格式化程序也使用UTC,只需设置它

请注意,
Date
值与时区无关-它只是自Unix纪元以来的毫秒数。它不知道最初用来创建它的时区是什么。这就是为什么需要在格式化程序上调用
setTimeZone
(或者使用带区域的构造函数)

以毫秒为单位的318表示原始的
Date
值包含318毫秒分量。无论如何,
java.util.Date
只支持毫秒的分辨率,因此您应该在您的格式中使用
SSS000000
。。。您应该将毫秒值设置为0:

c.set(Calendar.MILLISECOND, 0);
(令人烦恼的是,设置“年、月、日、时、分、秒”并没有重置毫秒值。我觉得这很疯狂,但是…)


另外,内置的Java日期/时间API在各种方面都非常糟糕。您很可能希望改为使用…

您正在创建一个
SimpleDataFormatter
,而不指定时区-因此默认情况下它将使用系统本地时区。如果希望格式化程序也使用UTC,只需设置它

请注意,
Date
值与时区无关-它只是自Unix纪元以来的毫秒数。它不知道最初用来创建它的时区是什么。这就是为什么需要在格式化程序上调用
setTimeZone
(或者使用带区域的构造函数)

以毫秒为单位的318表示原始的
Date
值包含318毫秒分量。无论如何,
java.util.Date
只支持毫秒的分辨率,因此您应该在您的格式中使用
SSS000000
。。。您应该将毫秒值设置为0:

c.set(Calendar.MILLISECOND, 0);
(令人烦恼的是,设置“年、月、日、时、分、秒”并没有重置毫秒值。我觉得这很疯狂,但是…)


另外,内置的Java日期/时间API在各种方面都非常糟糕。您很可能希望研究使用…

GAAA。我刚刚学习了两次日历/时间戳/格式化程序!谢谢是-特别是,“318”表示毫秒也没有重置为0.GAAA。我刚刚学习了两次日历/时间戳/格式化程序!谢谢是-特别是,“318”表示毫秒也没有重置为0。