gpt4 book ai didi

java - 将 UTC 日期转换为当前时区

转载 作者:行者123 更新时间:2023-12-01 18:02:32 29 4
gpt4 key购买 nike

我必须将“2016-09-25 17:26:12”格式的 UTC 日期转换为 Android 的当前时区。我这样做了:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date myDate = simpleDateFormat.parse(temp.getString("date"));
System.out.println(mydate.toString());

这有效,但我不知道为什么它也打印“GMT+02:00”。这是输出:“Sun Sep 25 19:26:12 GMT+02:00 2016”,我不想显示“GMT+02:00”。

编辑解决方案的代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat outputSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date myDate = simpleDateFormat.parse(temp.getString("date"));
System.out.println(outputSdf.format(myDate));

最佳答案

tl;博士

LocalDateTime.parse( "2016-09-25 17:26:12".replace( " " , "T" ) )
.atZoneSameInstant( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ) )

避免遗留日期时间类

您正在使用与最早版本的 Java bundle 在一起的麻烦的旧日期时间类。现在被 java.time 类取代。

ISO 8601

您输入的字符串几乎符合标准ISO 8601 java.time 类默认使用的格式。将中间的空格替换为 T

String input = "2016-09-25 17:26:12".replace( " " , "T" );

本地日期时间

输入缺少 offset-from-UTC 的任何指示或time zone 。所以我们解析为 LocalDateTime .

LocalDateTime ldt = LocalDateTime.parse( input );

偏移日期时间

您声称从应用程序的上下文中知道此日期时间值应为 UTC 。所以我们将该偏移量指定为常量 ZoneOffset.UTC成为OffsetDateTime .

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC );

分区日期时间

您还说您希望将此值调整为用户 JVM(或本例中的 Android 运行时)的当前默认时区。请注意,此默认值可以在应用执行期间随时更改。如果时区很重要,您应该明确询问用户所需/预期的时区。 ZoneId 类表示时区。

ZoneId z = ZoneId.systemDefault(); // Or, for example: ZoneId.of( "America/Montreal" )
ZonedDateTime zdt = odt.atZoneSameInstant( z );

生成字符串

并且您说您想要生成一个字符串来表示该日期时间值。您可以指定任何您想要的格式。但通常最好让 java.time 根据 Locale 中定义的人类语言和文化规范自动为您本地化。目的。使用FormatStyle指定长度或缩写(FULLLONGMEDIUMSHORT)。

Locale locale = Locale.getDefault();  // Or, for example: Locale.CANADA_FRENCH
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ).withLocale( locale );
String output = zdt.format( f );

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧日期时间类,例如 java.util.Date , .Calendar , & java.text.SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到 java.time。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。

许多 java.time 功能已向后移植到 ThreeTen-Backport 中的 Java 6 和 7并进一步改编为AndroidThreeTenABP (参见How to use…)。

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于java - 将 UTC 日期转换为当前时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39690944/

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