[英]Is there any alternative to TimeZone.getTimeZone() in Java?
Java中的TimeZone.getTimeZone()
是否有替代方法,因為getTimeZone()
已synchronized
,導致我的程序/應用程序按比例縮小。
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的日期和時間班Date
, Calendar
, SimpleDateFormat
也TimeZone
-是早已過時的,而且從來沒有精心設計的。 自Java 8(四年前開始)以來,Java便已包含現代Java日期和時間API java.time
。 它取代了它們,並且更好用。
如果您認為需要一個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在瓜達爾卡納爾群島= 2018-06-21T07:23:31.615464-07:00 [美國/道森克里克]
當然,對於舊的API,您可能需要老式的TimeZone
對象,而您要么無法更改,要么現在不想更改。 在這種情況下,請使用Lino在另一個答案中指出的轉換:
TimeZone oldfashionedTimeZone = TimeZone.getTimeZone(zone);
System.out.println(oldfashionedTimeZone);
sun.util.calendar.ZoneInfo [ID = “美國/道森克里克”,偏移= -25200000,dstSavings = 0,useDaylight =假,過渡= 58,lastRule =空]
如果您的問題是TimeZone.getTimeZone(String)
的同步正在減慢您的程序速度,我想知道您正在創建多少個TimeZone
對象? 僅有600個可用的時區ID(在我的Java 10中),我認為您不需要那么多。 我仍然明確建議在TimeZone
推薦ZoneId
,但是如果創建時間太長,將它們緩存可能是更好的選擇?
沒什么大不了的。 java.time
在Java 6和7上也能很好地工作。 只有到過時的類的轉換是不同的,例如:
TimeZone oldfashionedTimeZone = DateTimeUtils.toTimeZone(zone);
org.threeten.bp
導入日期和時間類。 java.time
。 java.time
。 java.time
到Java 6和7的java.time
移植(JSR-310的ThreeTen)。 那么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"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.