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
对于您遗漏的两部分,有两种不同的解释:
>
为什么是秒的部分
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:缺少右括号