datetime - 如何将包含日期和时区的字符串解析为DateTime

标签 datetime kotlin timezone datetime-parsing

我有可以这样格式化的字符串(取决于时区,例如):

"2018-10-17T15:33:15 UTC"

"2018-10-17T17:03:00 Europe/Praga

"2018-10-18T12:00:00 America/Kentucky/Monticello"



所以这些字符串的末尾包含Zone ID

如何将此类字符串解析为datetime?

我正在尝试:
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)

但是无法解析

最佳答案

您可以创建自己的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/

关于datetime - 如何将包含日期和时区的字符串解析为DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52862366/

相关文章:

python - 如何使用 Python ftplib 获取 FTP 文件的修改时间

constants - "const"和 "val"有什么区别?

java - 如何在 CRONET 中将 json 对象作为 post 请求发送?

Android库无法编译kotlin

docker - 如何在Docker中分配时区

c# 获取 UTC 特定时区的午夜时间

string - 可以直接比较存储为字符串/文本的日期吗?

javascript - 日期字符串转换浏览器与夏令时的差异

c# - 用键盘输入日期只是数字,没有不必要的操作

.NET 时区信息