java.time
Các Answer by BalusC là tốt ở chỗ nó chỉ bạn sử dụng java.time. Nhưng Câu trả lời đó sử dụng LocalDateTime
trong đó Instant
phù hợp hơn. A LocalDateTime
là không phải một thời điểm trên dòng thời gian vì nó cố ý không có khái niệm về offset-from-UTC hoặc time zone.
java.time
Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp ngày giờ phiền hà cũ như java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. Nhóm Joda-Time cũng khuyên di chuyển sang java.time.
Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích.
Phần lớn java.chức năng thời gian được chuyển sang Java 6 & 7 trong ThreeTen-Backport và tiếp tục được điều chỉnh cho Android theo số ThreeTenABP.
Instant
Một khoảnh khắc trên Timeline trong UTC với độ phân giải lên đến nanoseconds được đại diện bởi lớp Instant
.
Instant instant = Instant.ofEpochSecond (1_320_105_600L);
Dump to console. Giá trị đầu vào của bạn là thời điểm đầu tiên của ngày 1 tháng 11 năm 2011 tại UTC. Các Z
cuối cùng, viết tắt của 'Zulu', có nghĩa là UTC.
System.out.println ("instant: " + instant);
ngay lập tức: 2011-11-01T00: 00: 00Z
ZonedDateTime
Trong ý kiến của bạn, bạn đề cập đến muốn thấy điều này ngày thời gian qua ống kính của thời America/Chicago
vùng. Sử dụng proper time zone name. Áp dụng múi giờ, ZoneId
để nhận đối tượng ZonedDateTime
. Chúng ta thấy rằng Chicago là năm giờ sau UTC vào ngày đó.
ZoneId zoneId = ZoneId.of ("America/Chicago");
ZonedDateTime zdt = instant.atZone (zoneId);
zdt: 2011-10-31T19: 00-05: 00 [Mỹ/Chicago]
Strings
Các Strings thấy ở trên là ở định dạng tiêu chuẩn ISO 8601. Để tạo chuỗi ở các định dạng khác, hãy sử dụng lớp DateTimeFormatter
. Bạn có thể chỉ định mẫu tùy chỉnh của riêng mình. Nhưng nói chung là tốt nhất để cho java.time tự động bản địa hóa các ngôn ngữ và các chỉ tiêu văn hóa của con người được mã hóa trong một đối tượng Locale
.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL);
formatter = formatter.withLocale (Locale.US);
String output = zdt.format (formatter);
thứ Hai 31 tháng 10, 2011 07:00:00 CDT
Để xác định định dạng tùy chỉnh của riêng bạn, tìm Stack Overflow cho nhiều ví dụ và thảo luận nhiều hơn nữa.
Một ý tưởng sẽ là duyệt qua các javadocs - ví dụ java.util.Date – Ingo