SORU
4 ŞUBAT 2010, PERŞEMBE


Dönüştürme 8601 uyumlu ISO java Dize.açıklama.Tarih

Bir java ISO 8601 biçimlendirilmiş bir Dize dönüştürmek için çalışıyorum.açıklama.Tarih.

Desen "yyyy-aa-gg Mİ İYİ:dd:eğer bir Yerel ile kullanıldığında" ISO8601 uyumlu olması için (örnek karşılaştırın).ssZ buldum Ancak, java kullanarak.metin.SimpleDateFormat, düzgün biçimlendirilmiş bir Dize dönüştürmek "2010-01-01T12:00:00 01:00". İlk dönüştürmek için var "2010-01-01T12:00:00 0100", kolon olmadan. Yani, geçerli bir çözümdür

SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);
String date = "2010-01-01T12:00:00 01:00".replaceAll("\\ 0([0-9]){1}\\:00", " 0$100");
System.out.println(ISO8601DATEFORMAT.parse(date));

belli ki bu hoş değil. Eksik bir şey yoksa daha iyi bir çözüm mıyım?

cevap

JuanZe yorum için teşekkürler Joda-Time büyü buldum, ayrıca described here. Yani, çözümdür

DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
String jtdate = "2010-01-01T12:00:00 01:00";
System.out.println(parser2.parseDateTime(jtdate));

Ya da daha basitçe, yapıcı üzerinden varsayılan çözümleyici kullanın:

DateTime dt = new DateTime( "2010-01-01T12:00:00 01:00" ) ;

Bana, bu güzel.

CEVAP
4 ŞUBAT 2010, PERŞEMBE


Ne yazık ki, zaman dilimi biçimleri SimpleDateFormat mevcut (Java 6 ve daha önceki sürümlerde) ISO 8601 uyumlu değildir. SimpleDateFormat anlar saat dilimi dizeleri gibi "GMT 01:00" veya "0100", ikincisi RFC # 822 göre.

Eğer Java 7 ISO göre saat dilimi tanımlayıcıları için destek eklendi bile 8601, SimpleDateFormat isteğe bağlı parçalar için destek olduğu gibi hala düzgün tam bir tarih dizesi ayrıştırmak mümkün değildir.

Giriş dizesi regexp kullanarak yeniden biçimlendirme kesinlikle bir olasılıktır, ama değiştirme kurallarını sorunuzu kadar basit değildir:

  • Bölgeleri dize mutlaka sonu gelmez yani saat UTC, tam değil, biraz zaman ":00".
  • ISO8601 saat sayısı saat dilimi dahil edilmesini sağlar, "01" eşittir "01:00"
  • ISO8601 sağlar kullanımı "Z" yerine UTC belirtmek için "00:00".

Daha kolay çözüm muhtemelen JAXB XML Şema özelliklerine göre ISO8601 tarih dizeyi ayrıştırmak gerekir beri JAXB veri türü dönüştürücü kullanmaktır. javax.xml.bind.DatatypeConverter.parseDateTime("2010-01-01T12:00:00Z") Calendar bir nesne verir ve sadece getTime () Date bir nesne gerekiyorsa,.

Muhtemelen Joda-Time için de kullanabilirsin, ama bundan da rahatsız neden bilmiyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • metal571

    metal571

    30 Mayıs 2006
  • RyanXLT

    RyanXLT

    22 Ocak 2011
  • spyib

    spyib

    9 Ocak 2007