将以下ISO字符串2017-09-01T01:00:00.000Z
转换为日期时出现问题。
我正在使用SimpleDateFormat
,如下所示
SimpleDateFormat stringToDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date date = stringToDate.parse("2017-09-01T01:00:00.000Z");
日期对象输出的日期如下所示
Fri Sep 01 01:00:00 MDT 2017
当我得到
的输出时Fri Sep 01 01:00:00 UTC 2017
OR
Fri Aug 31 19:00:00 MDT 2017
看起来它没有正确地进行时区转换,因为时间没有改变,但是时区是不应该更改两者或两者的时区。
答案 0 :(得分:2)
'Z'
周围的单引号表示它不被解释为UTC的时区说明符:它只是字符串中的文字Z
,将被丢弃。
由于您没有专门在SimpleDateFormat
上设置时区,因此会在JVM的默认时区中解析日期。
Date.toString()
使用您的JVM默认时区。 Date
中没有时区。如果要在特定时区打印,则需要使用SimpleDateFormat
进行打印。
答案 1 :(得分:0)
您应该使用java.time类来处理现代Java中的日期。
日期不存储时区,而Date.toString()在渲染时使用系统默认时区。
答案 2 :(得分:0)
你也可以尝试这个函数调用来创建Calendar
实例,它应该支持 yyyy-MM-dd'T'HH:mm:ss.SSSZ 格式。
Calendar cal = javax.xml.bind.DatatypeConverter.parseDateTime(ymd);
编辑:嗯,你说Android确定这个课程可能无法使用。