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);
当我试图打印转换后的日期时,我没有得到所需格式的日期。
< code >输出:2019-11-15t 18:30:00 z 2019-11-15t 18:30
为什么转换日期中缺少秒部分和“Z”
对于您缺少的两个部分,有两种不同的解释:
>
为什么是秒部分
LocalDateTime.toString()
(当您将日期时间连接到字符串时隐式调用)如果秒(和秒的小数部分)为零,则省略秒。引用文档:使用的格式将是输出省略部分暗示为零的时间的完整值的最短格式。
转换日期中缺少“Z”
原始字符串中的
Z
是UTC的偏移量(零)。LocalDateTime
没有UTC偏移量,因此在解析为LocalDateTime
时,您将丢失此信息。再次引用留档是LocalDateTime
:ISO-8601日历系统中不带时区的日期时间,如2007-12-03T10:15:30。
若要保留偏移量,请使用< code>OffsetDateTime而不是< code>LocalDateTime:
String data = "2019-11-15T18:30:00Z"; OffsetDateTime date = OffsetDateTime.parse(data); System.out.println(data + "\t" + date);
输出:
2019-11-15T18:30:00Z 2019-12-15T17:30Z
还是没有秒针。要在它们为零的情况下打印它们,请使用< code>DateTimeFormatter,就像您已经在使用的那个一样,只用于格式化:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX"); System.out.println(data + "\t" + date.format(formatter));
2019-11-15T18:30:00Z 2019-11-15T18:30:00Z
只有永远不要将
Z
硬编码为格式模式字符串中的文字。正如我所说,它是一个偏移量。如果您硬编码它,当有一天您获得具有不同偏移量的OffsetDateTime
时,您也会打印Z
,并且您的输出将完全错误。相反,使用模式字母X
作为偏移量。
- 的文档
LocalDateTime
LocalDateTime的文档。toString()
- 一个密切相关的问题:将时间戳解析为LocalDateTime
- 另一个相关问题:在Java8中使用时区格式化LocalDateTime
当我尝试打印转换后的日期时,我没有得到所需格式的日期。
问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。
我得到一串零。有人能帮忙吗?
我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?
问题内容: 我正在尝试将字符串转换为日期格式,我尝试了很多方法来实现此目的,但是没有成功。我的字符串是“ 2012年1月17日”。我想将其转换为“ 2011-10-17”。有人可以告诉我这样做的方法吗?如果您通过示例工作过,那将是真正的帮助! 问题答案:
问题内容: 我有一个包含日期格式的字符串。 您如何建议我以最佳方式将其转换为格式? 这就是我天真地做的事情: 但是还有其他更优雅,更有效的方法吗?就是 使用一些内置功能?快速搜寻API时,我找不到一个。 这里有人知道替代方法吗? 问题答案: 用途: