Scala - 将带有时区的ISO 8601格式化字符串转换为时间戳

时间:2018-01-19 17:42:40

标签: scala timezone timestamp

给出的字符串:“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”,导致错误。

1 个答案:

答案 0 :(得分:7)

请看SimpleDateFormat

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

您的模式中需要设置时区字母X(它不应该有引号):

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

此外,hh是"上午/下午(1-12)"我猜你想要HH吗?

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