如何javax.time.Instant在本地时区中将a 格式化为字符串?以下内容将本地语言转换Instant为UTC,而不是我期望的那样。删除对的调用toLocalDateTime()也是如此。我该如何获取当地时间?
javax.time.Instant
Instant
toLocalDateTime()
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中的JSR-310参考实现。
在您否决我的答案之前,请注意,问题明确(以粗体显示)是指 JSR-310参考实现的旧版本 0.6.3 !在Java 8和新的日期库问世之前,我在2012年12月问了这个问题!
我放弃了对JSR-310类DateTimeFormatter和ZonedDateTime,而是采取了老式的java.util.Date和java.text.SimpleDateFormat:
DateTimeFormatter
ZonedDateTime
java.util.Date
java.text.SimpleDateFormat
public String getDateTimeString( final Instant instant ) { checkNotNull( instant ); DateFormat format = new SimpleDateFormat( "yyyyMMddHHmmss" ); Date date = new Date( instant.toEpochMillisLong() ); return format.format( date ); }