java 8 中的日期格式化程序
Date formatter in java 8
我有一个要求,我必须存储不同的日期和时间以及时区。
我使用了 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)));
我得到的输出为 Sat Mar 12 00:44:10 IST 2016,但我希望输出为 java.util.Date 类型的 2016-03-11T14:14:10-05:00。有人可以建议我哪里出错了吗?
您使用的方式有误,这是更正后的代码
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)));
ZonedDateTime > 即时 > 日期
最好避免使用旧的日期时间 classes,包括 java.util.Date。但如果你必须,你可以转换。在旧的 java.util.Date class.
上调用新的 from
方法
为此,您需要在 UTC 时间轴上 Instant
片刻。
Instant instant = myZonedDateTime.toInstant();
java.util.Date juDate = java.util.Date.from( instant );
往另一个方向走:
Instant instant = juDate.toInstant();
我有一个要求,我必须存储不同的日期和时间以及时区。 我使用了 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)));
我得到的输出为 Sat Mar 12 00:44:10 IST 2016,但我希望输出为 java.util.Date 类型的 2016-03-11T14:14:10-05:00。有人可以建议我哪里出错了吗?
您使用的方式有误,这是更正后的代码
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)));
ZonedDateTime > 即时 > 日期
最好避免使用旧的日期时间 classes,包括 java.util.Date。但如果你必须,你可以转换。在旧的 java.util.Date class.
上调用新的from
方法
为此,您需要在 UTC 时间轴上 Instant
片刻。
Instant instant = myZonedDateTime.toInstant();
java.util.Date juDate = java.util.Date.from( instant );
往另一个方向走:
Instant instant = juDate.toInstant();