如何格式化javax.time.Instant http://threeten.sourceforge.net/apidocs-2011-01-07/javax/time/Instant.html作为本地时区的字符串?以下是本地翻译的Instant
to UTC http://en.wikipedia.org/wiki/Coordinated_Universal_Time,而不是我所期望的本地时区。删除呼叫toLocalDateTime() http://threeten.sourceforge.net/apidocs/javax/time/calendar/ZonedDateTime.html#toLocalDateTime%28%29做同样的事情。我怎样才能得到当地时间?
public String getDateTimeString( final Instant instant )
{
checkNotNull( instant );
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DateTimeFormatter formatter = builder.appendPattern( "yyyyMMddHHmmss" ).toFormatter();
return formatter.print( ZonedDateTime.ofInstant( instant, TimeZone.UTC ).toLocalDateTime() );
}
注意:我们使用的是旧版本0.6.3 http://sourceforge.net/projects/threeten/files/threeten/0.6.3/jsr-310-ri-0.6.3.jar/download of the JSR-310 http://sourceforge.net/apps/mediawiki/threeten/index.php?title=ThreeTen参考实现。
用即将完成的 JDK1.8 版本回答这个问题
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(ZoneId.systemDefault());
return formatter.format(instant);
关键是Instant
没有任何时区信息。因此,无法使用任何基于日期/时间字段的模式对其进行格式化,例如“yyyyMMddHHmmss”。通过指定区域DateTimeFormatter
,在格式化时将瞬间转换为指定的时区,使其能够正确输出。
另一种方法是转换为ZonedDateTime
:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
return formatter.format(ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()));
两种方法是等效的,但是如果我的数据对象是Instant
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)