我想字符串值“2018-10-11T12:00:00Z”转换; 到ZonedDateTime。 如果使用默认ZonedDateTime.parse(zonedDateTime)然后即00 SS部分被去除和我得到“2018-10-11T12:00Z”作为输出。
你能帮帮如何留住00作为SS一部分。
String zonedDateTime = "2018-10-11T12:00:00Z";
ZonedDateTime z = ZonedDateTime.parse(zonedDateTime);
System.out.println(z); // return 2018-10-11T12:00Z
ZonedDateTime z1 = ZonedDateTime.parse (zonedDateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ") );
System.out.println(z1); // Exception : Text '2018-10-11T12:00:00Z' could not be parsed at index 19
打印秒
当你只是打印ZonedDateTime
使用System.out.println
,你是隐式调用它toString
方法。 当秒和第二的分数是0, toString
离开他们。 如果一定要打印出来,用格式化格式化 (而不是使用一个解析):
DateTimeFormatter formatterWithSeconds = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssXXX");
System.out.println("z with seconds: " + z.format(formatterWithSeconds));
输出是:
Z,使用秒:2018-10-11T12:00:00Z
这里最重要的区别在于之间ZonedDateTime
对象及其字符串表示。 所述ZonedDateTime
对象总是包含秒和纳秒,同样当它们是0。串表示可以或可以不包括它们。 一ARG ZonedDateTime.parse
已经解析了00
秒钟。 顺便说一句,它接受既没有秒的字符串。
使用即时或OffsetDateTime
顺便说一句,因为你的字符串包含一个偏移量( Z
),并没有时区(如非洲/内罗毕),一个OffsetDateTime
更精确匹配为代表。 该代码将正常工作,如果你只是查找/替换ZonedDateTime
与OffsetDateTime
整个以来,API是相似的。
如果偏移总是Z
(为“祖鲁时区”,或从UTC偏移0),使用Instant
:
String instantString = "2018-10-11T12:00:00Z";
Instant i = Instant.parse(instantString);
System.out.println("As Instant: " + i);
我已经给你的String
变量名称是更适合这个片段; 它仍然是相同的字符串。 输出:
即时:2018-10-11T12:00:00Z
奇怪的是Instant.toString
确实连打印秒的时候,他们是0。
请阅读更多关于正确类型由@Basil布尔克答案使用。
出了什么错在你的代码? 解析Z形状信
// Exception : Text '2018-10-11T12:00:00Z' could not be parsed at index 19
这里的问题是不是与秒,也不与ss
。 指数19就是其中Z
是在你的字符串。 两ARG ZonedDateTime.parse
对象,因为模式字母Z
不匹配Z
的时间串。 如果您还需要提供格式模式字符串解析Z
,使用大写X
(其中一个或多个的取决于非零如何偏移的表情)。 从模式字母的文件:
Symbol Meaning Presentation Examples
------ ------- ------------ -------
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15
Z zone-offset offset-Z +0000; -0800; -08:00
链接
-
DateTimeFormatter
文档 - 相关问题: 解析日期字符串在Java中
在由OLE VV答案是正确的,应该被接受。 我将添加一个思想,一个方便的参考表。
Instant
我想强调的是对方的回答提出的观点,即ZonedDateTime
技术上的工作,但不是最合适的类来分析一个字符串,如2018-10-11T12:00:00Z
。 这种格式的定义ISO 8601标准。 也就是说Z
上结束时,发音为“祖鲁”是指UTC(零小时-分钟-秒的偏移量)。
在ISO 8601标准格式的java.time类默认情况下使用。 无需指定的格式设置模式。
Instant
是合适的类来表示UTC片刻。
Instant instant = Instant.parse( "2018-10-11T12:00:00Z" ) ;
产生在同一个String ISO 8601标准格式。
String output = instant.toString() ;
所述OffsetDateTime
类表示UTC或与其它偏移从-UTC值的时刻,任何数目的小时-分钟-秒。 这个类也更加灵活,例如在通过产生具有各种格式的字符串DateTimeFormatter
类。 并且要求这个类来通过JDBC 4.2和更高版本的驱动程序支持,而Instant
和ZonedDateTime
支持是JDBC可选。
上偏移量和时区之间的区别清楚。
- 偏移从-UTC
简单地数个小时 - 分钟 - 秒。 积极为暂时领先于UTC的(向东)和阴性暂时落后UTC(向西)。 - 时区
时区是更多 。 时区是在过去,现在的历史,并以抵消使用由特定地区的人民未来的变化。
在Java中的日期时间类型
下面是在Java中的基本日期时间数据类型,既现代又传统的参照表。 避免遗留类型:他们是可怕的,人谁不明白的复杂性和日期时间处理细微之处的设计。