我有一个字符串 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());
java.time
,现代Java日期和时间API,其中包括LocalDateTime
和ZonedDateTime
时,为什么还要担心过时的类,如SimpleDateFormat
和Date
呢?我的建议是忘记它们。 - Ole V.V.