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
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.
Java tarih için dize dönüştürme...
Java dönüştürmek.açıklama.Dize için ta...
Java dönüştürme arasında.zaman.LocalDa...
java.açıklama.XMLGregorianCalendar içi...
Bir DateTime nesnesi verildiğinde, nas...