Cevap (vurgu benim) javadoc'tanZoneId
geliyor ...
ZoneId, Anlık ve YerelTarih Zamanları arasında dönüştürme yapmak için kullanılan kuralları tanımlamak için kullanılır. İki farklı kimlik türü vardır:
- Sabit ofsetler - tüm yerel tarih-saatler için aynı ofseti kullanan UTC / Greenwich'ten tamamen çözümlenmiş bir fark
- Coğrafi bölgeler - UTC / Greenwich'ten farkı bulmak için belirli bir kurallar dizisinin uygulandığı bir alan
Sabit ofsetlerin çoğu ZoneOffset ile temsil edilir. Herhangi bir ZoneId üzerinde normalized () 'i çağırmak, sabit bir ofset ID'sinin ZoneOffset olarak temsil edilmesini sağlayacaktır.
... ve javadoc'tanZoneId#of
(vurgu benim):
Bu yöntem, ZoneId veya ZoneOffset üreten kimliği ayrıştırır. Kimlik "Z" ise veya "+" veya "-" ile başlıyorsa bir ZoneOffset döndürülür .
Bağımsız değişken kimliği olarak belirtilir "UTC"
, bu nedenle ZoneId
bir uzaklığı olan a döndürür ve bu da dize biçiminde sunulur:
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));
Çıktılar:
2017-03-10T08:06:28.045Z
2017-03-10T08:06:28.045Z[UTC]
equals
Karşılaştırma için yöntemi kullandıkça, nesne denkliğini kontrol edersiniz . Tanımlanan fark nedeniyle, değerlendirmenin sonucu false
.
Tüm normalized()
belgelerinde önerildiği gibi bir yöntem kullanılır, kullanılarak karşılaştırma equals
döner true
olarak normalized()
karşılık gelen döner ZoneOffset
:
Mümkün olduğunda bir ZoneOffset döndürerek saat dilimi kimliğini normalleştirir.
now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true
Belgelerin belirttiği gibi, kullanırsanız "Z"
veya "+0"
giriş kimliği olarak, doğrudan of
döndürür ZoneOffset
ve aramanıza gerek yoktur normalized()
:
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true
Aynı tarih saatini saklayıp saklamadıklarını kontrol etmek için, isEqual
bunun yerine yöntemi kullanabilirsiniz :
now.withZoneSameInstant(ZoneOffset.UTC)
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true
Örneklem
System.out.println("equals - ZoneId.of(\"UTC\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
System.out.println("equals - ZoneId.of(\"UTC\").normalized(): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())));
System.out.println("equals - ZoneId.of(\"Z\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("Z"))));
System.out.println("equals - ZoneId.of(\"+0\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("+0"))));
System.out.println("isEqual - ZoneId.of(\"UTC\"): "+ nowZoneOffset
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))));
Çıktı:
equals - ZoneId.of("UTC"): false
equals - ZoneId.of("UTC").normalized(): true
equals - ZoneId.of("Z"): true
equals - ZoneId.of("+0"): true
isEqual - ZoneId.of("UTC"): true
ZoneId.of("Z")
verirZoneOffset.UTC
amaZoneId.of("UTC")
size bir verirZoneId
(bu değildirZoneOffset.UTC
). Bu API, en hafif tabirle sezgisel değil.