【发布时间】:2018-10-28 01:55:24
【问题描述】:
我有一个字符串 2017-07-31T01:01:00-07:00,我正在尝试将其解析为日期和 CST 时区。当我使用 Date 和 Java 8 ZonedDateTime 解析这个字符串时,我得到了不同的结果。我不明白为什么会发生这种情况以及我做错了什么。
String dateStr = "2017-07-31T01:01:00-07:00";
LocalDateTime time = null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss-hh");
String[] dateArray = dateStr.split("-");
String[] timeZones = TimeZone
.getAvailableIDs(TimeZone.getTimeZone("GMT-" + dateArray[dateArray.length - 1]).getRawOffset());
format.setTimeZone(TimeZone.getTimeZone(timeZones[0]));
Date dateObj = null;
try {
dateObj = format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
time = dateObj.toInstant().atZone(TimeZone.getTimeZone("CST").toZoneId()).toLocalDateTime();
ZonedDateTime time2 = ZonedDateTime.parse(dateStr).toInstant().atZone(TimeZone.getTimeZone("CST").toZoneId());
System.out.println(time);
System.out.println(time2.toLocalDateTime());
【问题讨论】:
-
为什么要手动提取时区-限制为0..9。这将在世界上很多地方遇到问题。
-
“我得到了不同的结果” 向我们展示。不要指望我们运行您的代码来查看它。编辑问题并显示您的结果。
-
当你可以使用
java.time,LocalDateTime和ZonedDateTime所属的现代Java日期和时间API时,你为什么要担心像SimpleDateFormat和@这样过时的类987654327@ 呢?我的建议是忘记它们。 -
CST 是指中国标准时间还是古巴标准时间?那些三个和四个字母的时区缩写是如此的模棱两可。