【问题标题】:Scala - convert ISO 8601 formated string with timezone to timestampScala - 将带时区的 ISO 8601 格式字符串转换为时间戳
【发布时间】:2018-01-19 17:42:40
【问题描述】:

给定字符串:“2018-04-22T01:00:00-05:00”

格式要求:时间戳

代码来源:

import java.sql.Timestamp
import java.text.SimpleDateFormat

val dateStr : String = "2018-04-22T01:00:00-05:00"

val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'")
val parsedDate = dateFormat.parse(dateStr)
val timestamp = new Timestamp(parsedDate.getTime)

但出现错误:

[error] (run-main-12) java.text.ParseException: Unparseable date: "2018-04-22T01:00:00-05:00"
java.text.ParseException: Unparseable date: "2018-04-22T01:00:00-05:00"
    at java.text.DateFormat.parse(DateFormat.java:366)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

注意:导致错误的字符串中有一个“-05:00”。

【问题讨论】:

    标签: scala timezone timestamp


    【解决方案1】:

    SimpleDateFormat

    Z 用于-0800 等格式的时区。

    您的模式中需要包含时区字母 X(并且不应包含引号):

    "yyyy-MM-dd'T'hh:mm:ssX"

    另外,hh 是“上午/下午 (1-12) 小时”我猜你想要 HH 代替?

    "yyyy-MM-dd'T'HH:mm:ssX"

    【讨论】:

    • "yyyy-MM-dd'T'HH:mm:ssX" 有效,但:2018-04-22T02:00:00-05:00 返回 2018-04-22 09:00:00.0 , 2 + 5 = 7 而不是 9 ??
    • 它会在您当地的时区返回,所以我得到Sun Apr 22 08:00:00 BST 2018
    猜你喜欢
    • 2015-11-16
    • 2019-02-02
    • 1970-01-01
    • 2021-01-11
    • 2020-11-23
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多