当前位置: 首页 > 知识库问答 >
问题:

我正在尝试将“2019-11-15T18:30:00Z”格式的字符串转换为日期格式。我还附上了代码[副本]

司空繁
2023-03-14
String data = "2019-11-15T18:30:00Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
LocalDateTime date = LocalDateTime.parse(data, formatter);
System.out.println(data + "\t" + date);

当我尝试打印转换后的日期时,我没有得到所需格式的日期。

输出:2019-11-15T18:30:00 z 2019-11-15T18:30

共有1个答案

麹飞航
2023-03-14

对于您遗漏的两部分,有两种不同的解释:

>

  • 为什么是秒的部分

    LocalDateTime.ToString()(在将日期时间连接到字符串时隐式调用)如果秒数(和秒数的分数)为零,则省略秒数。引用文档:

    原始字符串中的z是UTC的偏移量(0)。localdatetime没有UTC偏移量,因此当解析为localdatetime时,您会丢失这段信息。要再次引用文档,localdatetime是:

    ISO-8601日历系统中没有时区的日期-时间,如2007-12-03T10:15:30。

    若要保留偏移量,请使用offsetdatetime而不是localdatetime:

        String data = "2019-11-15T18:30:00Z";
        OffsetDateTime date = OffsetDateTime.parse(data);
        System.out.println(data + "\t" + date);
    

    还是没有时间。若要在它们为零的情况下打印它们,请使用DateTimeFormatter,类似于您已经使用的,仅用于格式化的DateTimeFormatter:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
        System.out.println(data + "\t" + date.format(formatter));
    

    2019-11-15T18:30:00 Z 2019-11-15T18:30:00 Z

    只是永远不要将z硬编码为格式模式字符串中的文字。就像我说的,这是一个抵消。如果您对其进行硬编码,那么当有一天您得到一个具有不同偏移量的offsetdatetime时,您还将打印z,而您的输出将是完全错误的。相反,使用模式字母x来进行偏移量。

    • LocalDateTime
    • 的文档
    • LocalDateTime.ToString()
    • 的文档
    • 一个密切相关的问题:将时间戳解析为LocalDateTime
    • 另一个相关问题:在Java8中使用时区格式设置LocalDateTime

  •  类似资料:
    • 当我试图打印转换后的日期时,我没有得到所需格式的日期。 < code >输出:2019-11-15t 18:30:00 z 2019-11-15t 18:30 为什么转换日期中缺少秒部分和“Z”

    • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

    • 我得到一串零。有人能帮忙吗?

    • 我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?

    • 问题内容: 我正在尝试将字符串转换为日期格式,我尝试了很多方法来实现此目的,但是没有成功。我的字符串是“ 2012年1月17日”。我想将其转换为“ 2011-10-17”。有人可以告诉我这样做的方法吗?如果您通过示例工作过,那将是真正的帮助! 问题答案:

    • 我的日期列值是字符串格式,显示的值像“44370.4087037037”、“44370.4087384259”。而我希望它们是MM/DD/YYYY HH: MM格式。我必须在Oracle中输入它到数据库中。我的查询是- 我应该如何转换它?我试图\u DATE,convert,cast-不起作用-出现错误-[错误]执行(5:23):ORA-00907:缺少右括号