JDK8 DateTime kitaplığı neden geçerli iso8601 tarih aralığı dizelerini ayrıştırmıyor gibi görünüyor? ": 00 01"java.time.ZonedDateTime.parse ve iso8601?
Bu çalışır:
java.time.ZonedDateTime.parse("2015-08-18T00:00+01")
ISO8601 Gönderen:
java.time.ZonedDateTime.parse("2015-08-18T00:00+01:00")
Bir çözümleme istisna atar It "01" yerine gibi ifade saat dilimi uzaklıklar bobinleri wikipedia sayfası:
UTC offset 'Z' fo yukarıda olduğunu aynı şekilde zaman eklenir rm ± [hh]: [mm], ± [hh] [mm] veya ± [hh]. Bu nedenle, tarif edildiği zaman UTC'den bir saat ileride (örneğin, kış boyunca Berlin'de ), bölge tanımlayıcısı "+01: 00", "+0100" veya "+01" olacaktır. .
DÜZENLEME: Bu JDK gerçek bir meşru hata gibi görünüyor.
https://bugs.openjdk.java.net/browse/JDK-8032051
Vay, yıllardır bu yeni tarih saat şeyler test ettikten sonra, ben bu kadar belirgin bir şey yakalamış düşündük. Ayrıca, JDK yazar türlerinin daha iyi bir otomatik test paketi kullanacak kadar titiz olduğunu düşündüm.UPDATE: Bu, geçerli jdk-9 yapısında tamamen giderilmiştir. Sadece doğruladım. Tam olarak aynı ayrıştırma komutu geçerli jdk-8 yapısında başarısız oldu ve jdk-9'da mükemmel çalışıyor.
EK: FWIW, ISO-8601 dayalı RFC 3339, bu kısa el için izin vermez. Saat dilimi ofsetlerinde dakika belirtmelisiniz.
Ve buradaki soru ...? (Olduğunu, başlık reword isteyebilirsiniz - Bilmenizi isteriz varsayalım ya neden, ya da belki bu işi yapmak için nasıl) – StaxMan
Saat dilimleri sadece bir ofset çok daha fazla karmaşıktır. Bu durumda güvende olabilirsiniz, fakat genel olarak zaman dilimleri açısından ofsetler düşünülmesinden kaçınılması gereken bir uygulamadır. – Necreaux
@StaxMan, tam soruyla açıklığa kavuşturuldu ... Bunun açık olduğunu düşündüm. – clay