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 ZoneIdbir 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]
equalsKarşı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 equalsdöner trueolarak 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 ofdöndürür ZoneOffsetve 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, isEqualbunun 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.UTCamaZoneId.of("UTC")size bir verirZoneId(bu değildirZoneOffset.UTC). Bu API, en hafif tabirle sezgisel değil.