因为getTimeZone()
是synchronized
,所以在Java语言中有没有TimeZone.getTimeZone()
的替代品,这会导致我的程序/应用程序缩容。
public static synchronized TimeZone getTimeZone(String ID) {
return getTimeZone(ID, true);
}
发布于 2018-06-21 22:30:53
你不会想在2018年使用TimeZone
的。现代的例子:
ZoneId zone = ZoneId.of("America/Dawson_Creek");
Java1.0和1.1中的date和time类-- Date
、Calendar
、SimpleDateFormat
和TimeZone
--很久以前就过时了,而且从来没有设计好过。java.time
是现代的Java date and time API,从Java8(四年前发布)起就包含在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);
输出:
Guadalcanal = 2018-06-21T07:23:31.615464-07:00America/Dawson_Creek中的
2018-06-22T01:23:31.615464
当然,对于遗留TimeZone
,您可能需要一个老式API对象,而您要么不能更改,要么现在不想更改。在这种情况下,使用Lino在另一个答案中指出的转换:
TimeZone oldfashionedTimeZone = TimeZone.getTimeZone(zone);
System.out.println(oldfashionedTimeZone);
偏移量sun.util.calendar.ZoneInfoid="America/Dawson_Creek",=-25200000,dstSavings=0,useDaylight=false,transitions=58,lastRule=null
如果您的问题是TimeZone.getTimeZone(String)
的同步使您的程序变慢,我想知道您正在创建多少TimeZone
对象?只有600个可用的时区I(在我的Java10中),我认为您不需要那么多。我仍然明确推荐ZoneId
而不是TimeZone
,但是如果创建时间太长,缓存它们可能是更好的选择?
问:但是如果我使用的是Java6或7呢?
没什么大问题。java.time
在Java6和7上也能很好地工作。只有到过时类的转换是不同的,例如:
TimeZone oldfashionedTimeZone = DateTimeUtils.toTimeZone(zone);
Java8及更高版本以及更新的安卓设备(我听说是从API26开始)的
从org.threeten.bp
导入date和time类
链接
java.time
.的java.time
安卓版本的java.time
的ThreeTen
发布于 2018-06-21 22:05:53
那TimeZone.getTimeZone(ZoneId)
呢?不是同步的:
// JDK 8 source
public static TimeZone getTimeZone(ZoneId zoneId) {
String tzid = zoneId.getId(); // throws an NPE if null
char c = tzid.charAt(0);
if (c == '+' || c == '-') {
tzid = "GMT" + tzid;
} else if (c == 'Z' && tzid.length() == 1) {
tzid = "UTC";
}
return getTimeZone(tzid, true);
}
请参见以下示例:
TimeZone timeZone = TimeZone.getTimeZone(ZoneId.of("Europe"));
https://stackoverflow.com/questions/50970311
复制相似问题