java - 如何在本地时区将 java.time.Instant 格式化为字符串?

如何格式化 javax.time.Instant作为本地时区的字符串?以下将本地 Instant 转换为 UTC ,而不是我期望的本地时区。删除对 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引用实现。

最佳答案

用即将完成的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,我通常会选择第一种。

https://stackoverflow.com/questions/13752031/

相关文章:

bash - 在bash中右对齐/填充数字

css - 如何在 Zurb Foundation 中垂直居中元素?

javascript - 从 contentEditable div 中删除格式

r - 如果我已经有 y 刻度,则用逗号(和 K?MM?)格式化 ggplot2 轴标签

angularjs - 使用 AngularJS 指令格式化输入字段,同时保持范围变量不变

java - Java 中的 StAX XML 格式

Java - 如何将数字格式化为 2 char 字符串?

c# - 格式化 .NET DateTime "Day",不带前导零

.net - JSON序列化时如何使用JavaScriptSerializer设置格式?

android - 在 android textview 中显示