Lib*_*hen 3 java datetime-format java-8 java-time zoneddatetime
我正在迁移我的代码以使用该java.time包,但我发现它DateTimeFormatter不能正确解释时区“BST”(英国夏令时间)。
它没有将其UTC+0100转换为太平洋/布干维尔时区,而是将其转换为太平洋/布干维尔时区。
有谁知道我如何解决这个问题而不需要回到旧的 SimpleDateFormat 或使用明确的时区?我的代码需要在世界多个地区运行。
这个时间戳格式是通过查询另一个系统获得的,所以我无法更改它。看来SimpleDateFormat可以正确识别时区。我的测试代码如下:
String sTime = "Fri Jun 07 14:07:07 BST 2019";
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("EEE MMM dd kk:mm:ss z yyyy");
ZonedDateTime zd = ZonedDateTime.parse(sTime, FORMATTER);
System.out.println("The time zone: " + zd.getZone());
FileTime ftReturn = FileTime.from(zd.toEpochSecond(), TimeUnit.SECONDS);
System.out.println("File time is: " + ftReturn);
DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
Date dtDD = df.parse(sTime);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dtDD);
FileTime ftReturn1 = FileTime.fromMillis(calendar.getTimeInMillis());
System.out.println("File time1 is: " + ftReturn1);
Run Code Online (Sandbox Code Playgroud)
测试结果:
时区:Pacific/Bougainville
文件时间为:2019-06-07T03:07:07Z
文件时间1为:2019-06-07T13:07:07Z
根据https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS:
BST - 亚洲/达卡
所以我想你不应该使用这个缩写。
编辑:刚刚发现这个问题,它回答了它。
所以不要使用孟加拉国标准时间;)而是使用ZoneId.of("Europe/London")
| 归档时间: |
|
| 查看次数: |
1065 次 |
| 最近记录: |