gpt4 book ai didi

java - 在 Java 中是否有替代 TimeZone.getTimeZone() 的方法?

转载 作者:行者123 更新时间:2023-11-30 07:46:06 24 4
gpt4 key购买 nike

在 Java 中是否有任何替代 TimeZone.getTimeZone() 的方法,因为 getTimeZone()同步的,导致我的程序/应用程序缩小。

public static synchronized TimeZone getTimeZone(String ID) {
return getTimeZone(ID, true);
}

最佳答案

您不想在 2018 年使用 TimeZone。现代示例:

    ZoneId zone = ZoneId.of("America/Dawson_Creek");

Java 1.0 和 1.1 中的日期和时间类 — DateCalendarSimpleDateFormat 以及 TimeZone - 早就过时了,从来没有精心设计过。 java.time,现代 Java 日期和时间 API 自 Java 8(四年前推出)以来已包含在 Java 中。它取代了它们并且更易于使用。

如果你认为你需要一个 TimeZone,例如设置 Calendar 的时区,这个类也被替换了(他们都有,正如我所说).而是使用现代的 ZonedDateTime:

    ZonedDateTime dateTime = ZonedDateTime
.parse("2018-06-22T01:23:31.615464+11:00[Pacific/Guadalcanal]");
ZonedDateTime converted = dateTime.withZoneSameInstant(zone);
System.out.println("2018-06-22T01:23:31.615464 in Guadalcanal = " + converted);

输出:

2018-06-22T01:23:31.615464 in Guadalcanal = 2018-06-21T07:23:31.615464-07:00[America/Dawson_Creek]

当然,您可能需要一个老式的 TimeZone 对象用于您无法更改或现在不想更改的遗留 API。在那种情况下,使用 Lino 在另一个答案中指出的转换:

    TimeZone oldfashionedTimeZone = TimeZone.getTimeZone(zone);
System.out.println(oldfashionedTimeZone);

sun.util.calendar.ZoneInfo[id="America/Dawson_Creek",offset=-25200000,dstSavings=0,useDaylight=false,transitions=58,lastRule=null]

如果您的问题是 TimeZone.getTimeZone(String) 的同步正在减慢您的程序,我想知道您正在创建多少个 TimeZone 对象?只有 600 个可用时区 ID(在我的 Java 10 中),我认为你不需要那么多。我仍然明确推荐 ZoneId 而不是 TimeZone,但是如果创建时间太长,缓存它们可能是更好的选择?

问题:但是如果我使用 Java 6 或 7 怎么办?

没什么大问题。 java.time 在 Java 6 和 7 上也能很好地工作。只有对过时类的转换不同,例如:

    TimeZone oldfashionedTimeZone = DateTimeUtils.toTimeZone(zone);
  • 在 Java 8 及更高版本以及较新的 Android 设备(据我所知,从 API 级别 26 开始)中,现代 API 是内置的。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,新类的反向端口(ThreeTen for JSR 310;查看底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间类。

链接

关于java - 在 Java 中是否有替代 TimeZone.getTimeZone() 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50970311/

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