我正在尝试在java中将pst时间戳转换为gmt
我有一个带有时间戳的字符串2021-03-23T22:00:00.669-07:00。我将如何处理该字符串并将其转换为 GMT 时间戳?
Run Code Online (Sandbox Code Playgroud)2021-03-24T05:03:00.669Z
我做了一些我尝试过的事情,但还没有去过任何地方
//Date date = new Date(str);
String s = str;
DateFormat pstFormat = new SimpleDateFormat();
DateFormat gmtFormat = new SimpleDateFormat();
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
TimeZone pstTime = TimeZone.getTimeZone("PST");
pstFormat.setTimeZone(gmtTime);
gmtFormat.setTimeZone(pstTime);
System.out.println("GMT Time: " + pstFormat.format(s));
System.out.println("PST Time: " + gmtFormat.format(s));
Run Code Online (Sandbox Code Playgroud)
结果java.lang.IllegalArgumentException: Cannot format given Object as a Date在这一行:
System.out.println("GMT Time: " + pstFormat.format(s));
Run Code Online (Sandbox Code Playgroud)
OffsetDateTime
.parse( "2021-03-23T22:00:00.669-07:00" )
.toInstant()
.toString()
Run Code Online (Sandbox Code Playgroud)
永远不要使用那些糟糕的日期时间类SimpleDateFormat、Date和TimeZone。几年前被 JSR 310 中定义的现代java.time类取代。
您的输入与 UTC 的偏移量为负七小时。因此解析为OffsetDateTime.
OffsetDateTime odt = OffsetDateTime.parse( "2021-03-23T22:00:00.669-07:00" ) ;
Instant instant = odt.toInstant() ;
String output = instant.toString() ;
Run Code Online (Sandbox Code Playgroud)
您的输入和所需输出均符合 ISO 8601 标准。java.time类在解析/生成文本时默认使用这些标准格式。因此无需指定格式模式。
切勿使用 2-4 个字母的伪区域,例如 PST。使用格式为的实时时区名称,Continent/Region例如America/Los_Angeles. 此外,与您的第一句话相反,您的输入并不代表特定时区的时刻。许多时区此时可能共享 -07:00 的偏移量,因此无法知道您的数据源想要哪个时区。
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |