Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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_Android_Calendar - Fatal编程技术网

Java 如何获取UTC日期时间

Java 如何获取UTC日期时间,java,android,calendar,Java,Android,Calendar,如何从以下代码中获取UTC日期时间?现在有了这些代码行,我得到了如下输出Fri Dec 31 05:30:00 IST 9999。这个输出正确吗?我的意思是说这次是UTC时间。有什么建议或帮助吗 代码快照 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); cal.set(9999, 11, 31, 0, 0, 0); Date date = cal.getTime(); Sy

如何从以下代码中获取UTC日期时间?现在有了这些代码行,我得到了如下输出
Fri Dec 31 05:30:00 IST 9999
。这个输出正确吗?我的意思是说这次是UTC时间。有什么建议或帮助吗

代码快照

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(9999, 11, 31, 0, 0, 0); 
        
Date date = cal.getTime();
System.out.println(date);

好的,输出是正确的,因为当您在IST中的系统上运行时,它是午夜UTC的预期值
Date.toString()
始终使用您的系统本地时区,因为它没有任何其他信息。
日历
知道它的时区,但
日期
不知道。底层信息只是“自Unix时代以来的毫秒数”


如果要将
日期
转换为特定时区中的文本表示形式,请使用
SimpleDataFormat
并在那里指定时区。

这里的问题是使用返回本地时区的Date.toString()方法

您可以使用此代码以UTC为单位获取当前时间:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
然后只需使用该对象获取所需的时间并使用它,请注意cal.getTimeInMillis()或getTime()都返回从历元开始的时间,该历元设置为1970年1月1日00:00:00.000 GMT(格里高利)。因此,如果要打印时间或将其用于其他用途,请计算可以使用的时间差,例如:

System.out.println(cal.get(Calendar.YEAR));
但是,如果您想获得这段时间和另一段时间之间的时间差,您应该为这段时间创建另一个日历实例(因为getTimeInMillis()的工作方式)。所以你可以做一些类似的事情:

Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
time.set(Calendar.YEAR, year);
time.set(Calendar.MONTH, month);
time.set(Calendar.DAY_OF_MONTH, day_of_month);
time.set(Calendar.HOUR_OF_DAY, hour_of_day);
time.set(Calendar.MINUTE, minute);
time.set(Calendar.SECOND, second);
long difInMillis = cal.getTimeInMillis() - time.getTimeInMillis();
此外,您应该始终记住,月份从0开始,而不是从1开始,以确保您可以使用日历。[此处是您的月份],并检查值


您可以在这里找到更多信息:

我完全不知道UTC和当地时间。实际上,我的需求是这样的,我有一个大小为20的日期数组,我需要用上面示例中显示的默认日期初始化这个数组。我之前做的是这样的,但他们说这是不正确的,因为在这段代码中,我将本地时间存储到数组中。他们想要的是将UTC日期时间存储到阵列中。那么如何做到这一点呢。帮我整理一下out@AndroidDev:您在问题中提供的代码已经使用UTC,因此这很好。如果您能在问题中提供所有相关上下文,这将在将来有所帮助。最后一个问题是,如何将本地DateTime转换为UTC,我的意思是,假设我在日期变量中存储了本地时间,如Date localDateTime=“Tue Jul 22 16:57:00 GMT+05:30 2014”。我如何将这个日期时间转换成UTC日期时间。@AndroidDev:这甚至不会编译。。。但是,如果您试图解析类似的内容,我建议您搜索有关堆栈溢出的其他问题-它已经被解决了好几次。@AndroidDev在StackOverflow中搜索“Joda”(是的,拼写为“Joda”)和“DateTimeZone”,以了解如何以合理的方式处理这些日期时间值。