การแปลงสตริงที่สอดคล้องกับ ISO 8601 เป็น java.util.Date
ฉันพยายามที่จะแปลงISO 8601การจัดรูปแบบ String java.util.Dateไป ฉันพบรูปแบบที่yyyy-MM-dd'T'HH:mm:ssZสอดคล้องกับ ISO8601 หากใช้กับ Locale (เปรียบเทียบตัวอย่าง) อย่างไรก็ตามการใช้java.text.SimpleDateFormatฉันไม่สามารถแปลง 2010-01-01T12:00:00+01:00String ฉันต้องแปลงมันเป็นครั้งแรก2010-01-01T12:00:00+0100โดยไม่ต้องโคลอน ดังนั้นทางออกปัจจุบันคือ 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)); ซึ่งเห็นได้ชัดว่าไม่ดี ฉันทำบางสิ่งบางอย่างหายไปหรือมีวิธีแก้ปัญหาที่ดีกว่า ตอบ ด้วยความเห็นของ JuanZe ฉันได้พบเวทมนตร์Joda-Timeมันอธิบายไว้ที่นี่ด้วย ดังนั้นทางออกคือ DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis(); String jtdate = "2010-01-01T12:00:00+01:00"; System.out.println(parser2.parseDateTime(jtdate)); หรืออย่างง่าย ๆ ให้ใช้ตัวแยกวิเคราะห์เริ่มต้นผ่านตัวสร้าง: DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" …