2010-10-01 48 views
41

Giá trị ngày tối thiểu trong Java là bao nhiêu?Ngày tối thiểu trong Java

+19

Ngày tối thiểu có nghĩa là gì? – qrtt1

+0

có thể trùng lặp của [Java: Giá trị tối đa và tối thiểu của một GregorianCalendar là gì?] (Http://stackoverflow.com/questions/2393016/java-what-where-are-the-maximum-and-minimum- values-of-a-gregoriancalendar) –

+0

Xem chủ đề này http://stackoverflow.com/questions/2393016/java-what-where-are-the-maximum-and-minimum-values-of-a-gregoriancalendar – sproketboy

Trả lời

36

Nếu bạn đang nói về java.util.Date như một dấu thời gian bạn có thể làm điều này

Date d = new Date(0L) và bạn sẽ thấy điều này đại diện cho Thu 1 tháng 1 01:00:00 GMT 1970


Như tulskiy đã chỉ ra có thể truyền giá trị âm cho hàm tạo Date. Nếu chúng ta làm được điều này và sử dụng một định dạng ngày bao gồm thời đại chúng ta có thể thấy:

Date d = new Date(Long.MIN_VALUE); 
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy G HH:mm:ss Z"); 
System.out.println(df.format(d)); 

hiển thị: Sun, 02 tháng 12 292.269.055 BC 16:47:04 +0000

55

Đừng quên rằng ngày constructor vui vẻ chấp nhận các giá trị âm.

Date date = new Date(Long.MIN_VALUE); 

lợi nhuận

Sun 02 tháng 12 22:47:04 BDT 292269055

Tôi đoán đó là về thời điểm Big Bang khủng long :)

EDIT

martin clayton đã trả lời, bạn có thể sử dụng lớp Lịch để kiểm tra thời đại. Điều này sẽ xuất ra 0 là viết tắt của BCE:

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(new Date(Long.MIN_VALUE)); 
System.out.println(calendar.get(Calendar.ERA)); 
+2

Nhưng điều này có vẻ là một ngày trong tương lai (năm 292269055), không phải trong quá khứ. Dường như thông số đang được hiểu là giá trị dương. – Grodriguez

+0

@Grodriguez - thời đại của năm đó là gì? ;-) –

+0

@Grodriguez: xem bản chỉnh sửa của tôi, đây là một giá trị trong quá khứ. –

4

Giống như đối với các lớp Lịch.

Hãy thử điều này:

Date d = new Date(Long.MIN_VALUE); 
System.out.println(d); 

Bạn sẽ thấy:

Sun Dec 02 16:47:04 GMT 292269055 

Nhưng định dạng ngày mặc định không bao gồm thời đại - đó là TCN cho ngày này.

11

Các câu trả lời khác có thể đúng nhưng sử dụng các lớp đã mã hóa.

java.time

Các lớp ngày thời gian cũ (java.util.Date/.Calendar vv) đã được thay thế bởi khuôn khổ java.time xây dựng vào Java 8 và sau đó.

Các java.time lớp học được lấy cảm hứng từ Joda-Time, được xác định bởi JSR 310, mở rộng dự án ThreeTen-Extra, back-chuyển đến Java 6 & 7 bởi dự án ThreeTen-Backport, và thích nghi với Android trong dự án ThreeTenABP. Xem Tutorial.

Trong giây lát trên dòng thời gian ở UTC với độ phân giải nanoseconds, hãy sử dụng Instant. Với số offset-from-UTC, hãy sử dụng OffsetDateTime.Đối với một số time zone (bù trừ + quy tắc cho bất thường), hãy sử dụng ZonedDateTime, nhưng do bản chất của nó không được xác định tối thiểu, cũng không phải ZoneId. Đối với giá trị chỉ có ngày không có thời gian trong ngày và không có múi giờ, hãy sử dụng LocalDate. Đối với giá trị chỉ có thời gian trong ngày không có ngày và không có múi giờ, hãy sử dụng LocalTime. Đối với ngày giờ không có múi giờ, hãy sử dụng LocalDateTime.

Chú ý: Hãy cảnh giác của việc sử dụng các giá trị như một số loại cờ hay ý nghĩa đặc biệt. Nhiều thư viện và cơ sở dữ liệu phần mềm khác có thể không hỗ trợ các giá trị cực đoan này. Đối với một lá cờ hoặc ý nghĩa đặc biệt như một "không có giá trị" không có giá trị, tôi khuyên bạn nên chọn một thời điểm tùy ý nhưng tránh đi đến mức cực đoan đó về phía trước hoặc tiến về phía trước trong thời gian. Có lẽ là Unix epoch reference date, khoảnh khắc đầu tiên của năm 1970 ở UTC, 1970-01-01T00: 00: 00Z. Định nghĩa như một hằng số trong Java: Instant.EPOCH

0

Kể từ Date được đánh dấu là Deprecated, tôi nghĩ cần phải có một cách khác để làm được việc này, vì vậy tôi xem xét một số các phương pháp, và tôi thấy cách này

Bạn cũng có thể sử dụng Long.MIN_VALUE, tại thời điểm tôi viết bài này, tôi đã không tìm kiếm, và thậm chí/vì vậy tôi không nhớ nó. enter image description here

+2

** Không chính xác: ** Lớp 'java.util.Date' là * không * không được dùng nữa (nhưng phải là). Một số phương thức của nó không còn được dùng nữa mà không phải toàn bộ lớp.Ngoài ra, câu trả lời này không cung cấp nhiều giá trị cho tâm trí của tôi. –

+0

tôi chỉ cần kiểm tra lại, và bạn đã đúng. một số phương thức khởi tạo của nó là, nhưng không phải là wholy – deadManN

Các vấn đề liên quan