bra*_*orm 7 java datetime-format datetime-parsing java-time dateformatter
这是我将String解析成的方法LocalDateTime.
public static String formatDate(final String date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS");
LocalDateTime formatDateTime = LocalDateTime.parse(date, formatter);
return formatDateTime.atZone(ZoneId.of("UTC")).toOffsetDateTime().toString();
}
Run Code Online (Sandbox Code Playgroud)
但这仅适用于输入字符串,
2017-11-21 18:11:14.05
但无法2017-11-21 18:11:14.057
使用DateTimeParseException.
如何定义适用于.SS和.SSS?的格式化程序?
Sle*_*idi 13
您需要构建具有指定分数的格式化程序
DateTimeFormatterformatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.appendFraction(ChronoField.MILLI_OF_SECOND, 2, 3, true) // min 2 max 3
.toFormatter();
LocalDateTime formatDateTime = LocalDateTime.parse(date, formatter);
Run Code Online (Sandbox Code Playgroud)
根本不需要定义格式化程序。
LocalDateTime.parse(
"2017-11-21 18:11:14.05".replace( " " , "T" )
)
Run Code Online (Sandbox Code Playgroud)
Sleiman Jneidi的答案特别聪明和高科技,但还有一个更简单的方法。
调整您的输入字符串以符合 ISO 8601 格式,这是 java.time 类中默认使用的格式。所以根本不需要指定格式模式。默认格式化程序可以处理小数秒的零(整秒)和九(纳秒)之间的任意数量的十进制数字。
您的输入几乎符合要求。只需将中间的 SPACE 替换为T.
String input = "2017-11-21 18:11:14.05".replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( input );
Run Code Online (Sandbox Code Playgroud)
ldt.toString(): 2017-11-21T18:11:14.050
通过这些问题的答案罗勒布尔克和苏莱曼Jneidi都非常优秀。我只想指出,EMH333的回答也有一个要点:对问题代码进行以下非常简单的修改就可以解决您的问题。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.[SSS][SS]");
Run Code Online (Sandbox Code Playgroud)
格式模式字符串中的方括号包含可选部分,因此该格式接受以秒为单位的3或2个小数。
可能的缺点:它完全不接受小数(只要有小数点)。
正如我所说,其他解决方案也非常好。您更喜欢哪一个主要取决于品味。
| 归档时间: |
|
| 查看次数: |
2930 次 |
| 最近记录: |