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

标签 java datetime formatting timezone jsr310

如何格式化 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.3JSR-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,我通常会选择第一种。

关于java - 如何在本地时区将 java.time.Instant 格式化为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752031/

相关文章:

java - 出现构建错误,但程序仍然完美运行

mysql - SQL 比较同一列中的 2 个日期时间

mysql - 在MySQL中获取直到上个月最后一天的数据

javascript - 在 Eclipse 中编辑文本/html 内容

python - Nosetests 断言错误输出格式

c - sscanf 格式问题避免 :

java - 我的 Android 应用程序遇到问题

java - 最佳实践 struts/jsp/i18n/resourceBundle

java - 将 iOS 应用程序转换为 Android 应用程序

c - 给日期加秒