tl; dr
LocalDateTime.parse(
"2018-01-23 01:23:45".replace(" " , "T")
).plusHours(2)
java.time
Cách tiếp cận hiện đại sử dụng java.time lớp thêm vào Java 8, Java 9, và sau đó.
dùng nhập theo định dạng YYYY-MM-DD HH: MM: SS
Phân tích rằng chuỗi nhập vào một đối tượng ngày thời gian. Định dạng của bạn gần tuân thủ định dạng chuẩn ISO 8601, được sử dụng theo mặc định trong các lớp java.time để phân tích cú pháp/tạo chuỗi. Để tuân thủ đầy đủ, hãy thay thế SPACE ở giữa bằng T
.
String input = "2018-01-23 01:23:45".replace(" " , "T") ; // Yields: 2018-01-23T01:23:45
Phân tích cú pháp dưới dạng LocalDateTime
cho biết đầu vào của bạn thiếu bất kỳ chỉ báo múi giờ hoặc offset-UTC nào.
LocalDateTime ldt = LocalDateTime.parse(input) ;
thêm hai giờ
Các lớp java.time có thể làm toán cho bạn.
LocalDateTime twoHoursLater = ldt.plusHours(2) ;
Time Zone
Hãy nhận biết rằng một LocalDateTime
không không đại diện cho một thời điểm, một điểm trên timeline. Không có bối cảnh của một múi giờ hoặc offset-from-UTC, nó không có ý nghĩa thực sự. Phần "Địa phương" của tên có nghĩa là bất kỳ địa chỉ hoặc không địa phương nào, thay vì bất kỳ một địa phương cụ thể nào. Chỉ cần nói "trưa vào ngày 21 tháng 1" có thể có nghĩa là buổi trưa ở Auckland, New Zealand diễn ra sớm hơn vài giờ so với buổi trưa ở Paris nước Pháp.
Để xác định thời điểm thực tế, bạn phải chỉ định vùng hoặc khoảng trống.
ZoneId z = ZoneId.of("Africa/Tunis") ;
ZonedDateTime zdt = ldt.atZone(z) ; // Define an actual moment, a point on the timeline by giving a context with time zone.
Nếu bạn biết múi giờ dành cho nhất định, áp dụng nó trước thêm hai tiếng đồng hồ. Lớp LocalDateTime
giả định các ngày 24 giờ chung đơn giản khi thực hiện phép tính. Nhưng trong các múi giờ khác nhau vào các ngày khác nhau, ngày có thể dài 23 hoặc 25 giờ hoặc có thể có độ dài khác.Vì vậy, để có kết quả chính xác trong ngữ cảnh được khoanh vùng, hãy thêm giờ vào số ZonedDateTime
thay vì LocalDateTime
.
Về 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 học ngày giờ legacy phiền hà cũ như java.util.Date
, Calendar
, & SimpleDateFormat
.
Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp 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. Đặc điểm kỹ thuật là JSR 310.
Nơi lấy các lớp java.time?
Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval
, YearWeek
, YearQuarter
và more.
Đọc là "stardate". Tôi thậm chí không * như * Star Trek. –