gpt4 book ai didi

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

转载 作者:bug小助手 更新时间:2023-10-28 10:44:54 35 4
gpt4 key购买 nike

如何格式化 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com