Date formatter in java 8
我有一个要求,我必须存储带有时区的不同日期和时间。
我已经使用了Java 8的ZonedDateTime。
1 2 3 4 | ZoneId zoneId = ZoneId.of("US/Eastern"); ZonedDateTime zt = ZonedDateTime.now(zoneId); System.out.println(zt.toString()); |
我的问题是我想以java.util.Date格式存储它。
我使用了DateTimeFormatter
1 2 | DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"); dtf.format(zt); |
直到这里工作正常,当我尝试使用简单的日期格式将其转换为java.util.Date时,这给了我所需的字符串格式的日期。
1 2 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); System.out.println(sdf.parse(dtf.format(zt))); |
我在IST 2016年3月12日星期六00:44:10获得输出,但我想在java.util.Date类型中将其输出为2016-03-11T14:14:10-05:00。有人可以建议我要去哪里哪里吗?
您使用的是错误的方式,这是已更正的代码
sdf.format(sdf.parse(val))这样正确的方法。
1 2 3 4 5 6 7 8 9 10 11 | 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))); |
ZonedDateTime>即时>日期
最好避免使用旧的日期时间类,包括java.util.Date。但是,如果必须,您可以进行转换。在旧的java.util.Date类上调用新的
为此,您需要在UTC的时间轴上花费
1 2 |
要走另一个方向:
1 | Instant instant = juDate.toInstant(); |