【发布时间】:2022-02-18 14:12:14
【问题描述】:
例如,如果我有字符串时间戳2022-01-12T19:41:27.000+00:00,我想得到2022-01-12T19:41:27.000Z。
我想确保我提供的解决方案可以在将来采用格式为“yyyy-mm-dd'T'HH:mm:ss.SSS+ZZ:ZZ”或任何其他输入的字符串时间戳格式,但总是返回一个标准输出,即“yyyy-mm-dd'T'HH:mm:ss.SSSZ”。
到目前为止,我想出了:
String ts = "2022-01-12T19:41:27.000+00:00";
Date date = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss.SSS+ZZ:ZZ",
Locale.US).parse(ts);
System.out.println(date);
Timestamp tsp = new Timestamp(date.getTime());
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss.SSSZ");
String str = formatter.format(tsp);
System.out.println(str);
但我遇到了以下异常:
error: unreported exception ParseException; must be caught or declared to be thrown
Date date = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss.SSS+ZZ:ZZ", Locale.US).parse(ts);
【问题讨论】:
-
添加一个标签来指示您使用的语言(Java?)会很有帮助。我认为您需要删除现有标签之一。
-
我建议在存储这些数据时避免使用字符串,在输出时使用本地化字符串表示
-
不要再使用过时的 SimpleDateFormat 和 java.util.Date 类。使用较新的 java.time API
-
你明白你的两个字符串
2022-01-12T19:41:27.000+00:00和2022-01-12T19:41:27.000Z是同一个意思吗?末尾的Z是 standard 的缩写+00:00,两者都表示与 UTC 的偏移量为零时分秒。此外,如果小数秒为零,则无需显示.000。 -
OffsetDateTime.parse( "2022-01-12T19:41:27.000+00:00" ).toString()
标签: java simpledateformat date-format dateformatter instant