我有一个要求,我必须在时区存储不同的日期和时间。 我使用了java 8的ZonedDateTime。
ZoneId zoneId = ZoneId.of("US/Eastern");
ZonedDateTime zt = ZonedDateTime.now(zoneId);
System.out.println(zt.toString());
我的问题是我想以java.util.Date格式存储它。 我使用了DateTimeFormatter
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
dtf.format(zt);
直到这里工作正常现在当我尝试使用简单的日期格式将其转换为java.util.Date时,这给了我字符串格式所需的日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
System.out.println(sdf.parse(dtf.format(zt)));
我得到输出为2016年3月12日00:44:10 IST 2016但我希望在java.util.Date类型中输出为2016-03-11T14:14:10-05:00。有人可以建议我哪里出错吗?
答案 0 :(得分:4)
您使用的方法是错误的,这是更正后的代码
sdf.format(sdf.parse(val))这是正确的方法。
ZoneId zoneId = ZoneId.of("US/Eastern");
ZonedDateTime zt = ZonedDateTime.now(zoneId);
System.out.println(zt.toString());
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
String val = dtf.format(zt);
System.out.println(val);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
//String dateStr = zt.format(sdf);
System.out.println(sdf.format(sdf.parse(val)));
答案 1 :(得分:2)
最好避免旧的日期时间类,包括java.util.Date。但如果你必须,你可以转换。在旧的java.util.Date类上调用新的from
方法。
为此,您需要在UTC时间轴上Instant
片刻。
Instant instant = myZonedDateTime.toInstant();
java.util.Date juDate = java.util.Date.from( instant );
走向另一个方向:
Instant instant = juDate.toInstant();