java.time
คำตอบโดย MadProgrammerถูกต้องโดยเฉพาะอย่างยิ่งเกี่ยวกับเคล็ดลับJoda เวลา สืบเพื่อ Joda เวลาที่ถูกสร้างขึ้นในขณะนี้เป็นJava 8เป็นใหม่แพคเกจ java.time นี่คือตัวอย่างโค้ดใน Java 8
เมื่อทำงานกับวันที่ - เวลา (ตรงข้ามกับวันที่ท้องถิ่น), เขตเวลาสำคัญ วันของเดือนขึ้นอยู่กับเขตเวลา ตัวอย่างเช่นเขตเวลาของอินเดียคือ+05:30
(ล่วงหน้าห้าชั่วโมงครึ่งก่อนเวลา UTC) ในขณะที่ฝรั่งเศสอยู่ข้างหน้าเพียงหนึ่งชั่วโมง ดังนั้นช่วงเวลาในวันใหม่ในอินเดียจึงมีหนึ่งวันในขณะที่ช่วงเวลาเดียวกันในฝรั่งเศสมีวันที่ "เมื่อวาน" การสร้างเอาต์พุตสตริงที่ไม่มีเขตเวลาใด ๆ หรือข้อมูลออฟเซ็ตกำลังสร้างความคลุมเครือ คุณขอเอาต์พุต YYYY-MM-DD ดังนั้นฉันจึงให้ แต่ฉันไม่แนะนำ แทนที่จะใช้ISO_LOCAL_DATE
ฉันจะได้ISO_DATE
รับผลลัพธ์นี้:2014-02-25+05:30
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );
DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );
ถ่ายโอนข้อมูลไปยังคอนโซล ...
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );
เมื่อวิ่ง ...
zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25
Joda เวลา
โค้ดที่คล้ายกันโดยใช้ไลบรารีJoda-Timeซึ่งเป็นตัวตั้งต้นถึง java.time
DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );
ISO 8601
โดยวิธีการรูปแบบของสายป้อนของคุณที่เป็นรูปแบบมาตรฐานหนึ่งในหลาย ๆ ที่มีประโยชน์วันเวลาของรูปแบบสตริงที่กำหนดโดยมาตรฐาน ISO 8601
ทั้ง Joda-Time และ java.time ใช้รูปแบบ ISO 8601 ตามค่าเริ่มต้นเมื่อแยกวิเคราะห์และสร้างการแทนค่าสตริงของค่าวันที่และเวลาต่างๆ
Date
การyyyy-MM-dd
หรือแยกสตริงจากyyyy-MM-dd
ไปDate
ค่า ?? ในการจัดรูปแบบวันที่เพียงใช้format1.format(date)
การแยกวิเคราะห์ใช้format1.parse(someStringValueInTheCorrectFormat)