我有这样的字符串,可以像这样格式化(取决于时区,例如):
“ UTC 2018-10-17T15:33:15”
“ 2018-10-17T17:03:00欧洲/普拉加
“ 2018-10-18T12:00:00美国/肯塔基州/蒙蒂塞洛”
所以这些字符串的末尾包含Zone ID
如何将此类字符串解析为日期时间?
我正在尝试什么:
val dateString = "2018-10-18T12:00:00 America/Kentucky/Monticello"
ISODateTimeFormat
.dateTimeParser()
.parseDateTime(dateString)
更新:
我也尝试过:
val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss zzzz")
val parsed: Date = simpleDateFormat.parse(dateString)
但是无法解析
答案 0 :(得分:3)
您可以创建自己的DateTimeFormatter
:
val date1 = "2018-10-17T15:33:15 UTC"
val date2 = "2018-10-17T17:03:00 Europe/Prague"
val date3 = "2018-10-18T12:00:00 America/Kentucky/Monticello"
//with JDK
val formatter = java.time.format.DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.optionalStart()
.appendLiteral(' ')
.parseCaseSensitive()
.appendZoneRegionId()
.toFormatter();
println(ZonedDateTime.parse(date1, formatter))
println(ZonedDateTime.parse(date2, formatter))
println(ZonedDateTime.parse(date3, formatter))
//With Joda Time
val jodaFormatter = org.joda.time.format.DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss ZZZ").toFormatter()
println(jodaFormatter.parseDateTime(date1))
println(jodaFormatter.parseDateTime(date2))
println(jodaFormatter.parseDateTime(date3))
此格式化程序只能解析“欧洲/布拉格”,而不能解析“欧洲/布拉格”。您可以在这里找到所有受支持的区域ID:https://www.mkyong.com/java8/java-display-all-zoneid-and-its-utc-offset/