Java SimpleDataFormat错误地将UTC转换为时区

Java SimpleDataFormat错误地将UTC转换为时区,java,android,Java,Android,将以下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"); date对象输出的日期如下所示 Fri Sep 01 01:00

将以下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");
date对象输出的日期如下所示

Fri Sep 01 01:00:00 MDT 2017
当我应该得到一个

Fri Sep 01 01:00:00 UTC 2017

看起来它没有正确地进行时区转换,因为时间没有改变,但时区已经改变,此时两者都不应该改变

  • 'Z'
    周围的单引号表示它没有被解释为UTC的时区说明符:它只是字符串中的一个文本
    Z
    ,被丢弃

    由于您没有专门在
    SimpleDataFormat
    上设置时区,因此将在JVM的默认时区中解析日期

  • Date.toString()
    使用JVM的默认时区。
    日期中没有时区。如果要在特定时区打印,需要使用
    SimpleDateFormat
    打印

  • 'Z'
    周围的单引号表示它没有被解释为UTC的时区说明符:它只是字符串中的一个文本
    Z
    ,被丢弃

    由于您没有专门在
    SimpleDataFormat
    上设置时区,因此将在JVM的默认时区中解析日期

  • Date.toString()
    使用JVM的默认时区。
    日期中没有时区。如果要在特定时区打印,需要使用
    SimpleDateFormat
    打印


  • 在现代java中,应该使用java.time类来处理日期


    Date不存储时区,Date.toString()在渲染时使用系统默认时区。

    在现代java中,应该使用java.time类来处理日期


    Date不存储时区,Date.toString()在渲染时使用系统默认时区。

    您也可以尝试此函数调用来创建
    日历
    实例,它应该支持yyyy-MM-dd't'HH:MM:ss.SSSZ格式

    日历cal=javax.xml.bind.DatatypeConverter.parseDateTime(ymd)


    编辑:嗯,你说Android ok这个类可能不可用。

    你也可以尝试这个函数调用来创建
    日历
    实例,它应该支持yyyy-MM-dd'T'HH:MM:ss.SSSZ格式

    日历cal=javax.xml.bind.DatatypeConverter.parseDateTime(ymd)


    编辑:嗯,你说安卓ok,这个课程可能不可用。

    谢谢。我误解了SimpleDataFormat的解析。一些stackoverflow的回答听起来像是在告诉SimpleDateFormat它在UTC。但如果它被丢弃,这更有意义。谢谢。我误解了SimpleDataFormat的解析。一些stackoverflow的回答听起来像是在告诉SimpleDateFormat它在UTC。但是如果它被丢弃,这更有意义。如果我可以的话,我会的。Android开发仍在从Java 7过渡到Java 8。你可以使用joda time或ThreeTenABP项目()来实现同样的目标(尽管它们也有缺点)。我一直在讨论使用joda只是为了省去使用这些旧库的一些麻烦。我正在努力让我正在使用的图书馆的信息保持清晰,但这可能是值得的。谢谢,如果可以的话我会的。Android开发仍在从Java 7过渡到Java 8。你可以使用joda time或ThreeTenABP项目()来实现同样的目标(尽管它们也有缺点)。我一直在讨论使用joda只是为了省去使用这些旧库的一些麻烦。我正在努力让我正在使用的图书馆的信息保持清晰,但这可能是值得的。谢谢你,还有更多,还有更多。
    Fri Aug 31 19:00:00 MDT 2017