java.time
Câu trả lời của MadProgrammer là chính xác, đặc biệt là mẹo về Joda-Time . Sự kế thừa cho Joda-Time hiện được tích hợp vào Java 8 dưới dạng gói java.time mới . Đây là mã ví dụ trong Java 8.
Khi làm việc với thời gian ngày (trái ngược với ngày địa phương), múi giờ rất quan trọng. Ngày trong tháng phụ thuộc vào múi giờ. Ví dụ, múi giờ Ấn Độ là +05:30
(năm giờ rưỡi trước UTC), trong khi Pháp chỉ đi trước một giờ. Vì vậy, một khoảnh khắc trong một ngày mới ở Ấn Độ có một ngày trong khi cùng một thời điểm ở Pháp có ngày Ngày hôm qua. Tạo đầu ra chuỗi thiếu bất kỳ múi giờ hoặc thông tin bù đắp nào đang tạo ra sự mơ hồ. Bạn đã yêu cầu đầu ra YYYY-MM-DD nên tôi đã cung cấp, nhưng tôi không khuyến nghị. Thay vì ISO_LOCAL_DATE
tôi đã từng sử dụng ISO_DATE
để có được đầu ra này: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 );
Kết xuất giao diện điều khiển
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );
Khi chạy đào
zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25
Joda-Thời gian
Mã tương tự sử dụng thư viện Joda-Time , tiền thân của java.time.
DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );
ISO 8601
Nhân tiện, định dạng của chuỗi đầu vào của bạn là định dạng chuẩn, một trong một số định dạng chuỗi thời gian ngày tiện dụng được xác định bởi ISO 8601 .
Cả Joda-Time và java.time đều sử dụng định dạng ISO 8601 theo mặc định khi phân tích cú pháp và tạo các biểu diễn chuỗi của các giá trị thời gian ngày khác nhau.
Date
đếnyyyy-MM-dd
hoặc phân tích một chuỗi từyyyy-MM-dd
mộtDate
giá trị ?? Để định dạng ngày, chỉ cần sử dụngformat1.format(date)
, để phân tích ngày, sử dụngformat1.parse(someStringValueInTheCorrectFormat)