dwj*_*ton 5 java datetime java-8
这就是我想做的:
public ZonedDateTime getZdt(String myDate, String format) {
return ZonedDateTime.parse(
myDate,
DateTimeFormatter.ofPattern(format)
.withZone(ZoneId.systemDefault())
);
}
getZdt("17-05-2017 00:10:59", "dd-MM-yyyy HH:mm:ss") //works fine
getZdt("17-05-2017", "dd-MM-yyyy") //DateTimeParseException (...Unable to obtain LocalTime from TemporalAccessor:)
Run Code Online (Sandbox Code Playgroud)
我想做的事情非常简单。我该如何让它发挥作用?
我为你提供了三点建议。
\n\n首先,这必须是相同的方法吗?可以要两个吗?我假设你只有两种可能的格式;如果你有十个,我认为这是一个不同的故事。
\n\n/** gets a ZonedDateTime from a date string with no time information */\npublic ZonedDateTime getZdtFromDateString(String myDate, String format) {\n return LocalDate.parse(myDate, DateTimeFormatter.ofPattern(format))\n .atStartOfDay(ZoneId.systemDefault());\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当然,您可以省略该format参数并使格式保持不变。
当然,您可以通过单一方法获得您想要的东西。我建议您的方法不要将格式传递给方法,而是自行检测它。
\n\nDateTimeFormatter一种选择是处理两种格式的自定义:
private static final DateTimeFormatter format = new DateTimeFormatterBuilder().appendPattern("dd-MM-uuuu")\n .optionalStart()\n .appendPattern(" HH:mm:ss")\n .optionalEnd()\n .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)\n .toFormatter();\n\npublic ZonedDateTime getZdt(String myDate) {\n return LocalDateTime.parse(myDate, format).atZone(ZoneId.systemDefault());\n}\nRun Code Online (Sandbox Code Playgroud)\n\n最后,Jacob G.\xe2\x80\x99 尝试两者的想法还不错。这里\xe2\x80\x99是我的版本:
\n\npublic ZonedDateTime getZdt(String myDate, String format) {\n try {\n return LocalDateTime.parse(myDate, DateTimeFormatter.ofPattern(format))\n .atZone(ZoneId.systemDefault());\n } catch (DateTimeParseException dtpe) {\n return LocalDate.parse(myDate, DateTimeFormatter.ofPattern(format))\n .atStartOfDay(ZoneId.systemDefault());\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n同样,人们可能更愿意省略format并使用两种常量格式。
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |