2010-10-01 22 views
41

Jaka jest minimalna wartość daty w języku Java?Minimalna data w języku Java

+19

Co oznacza minimalna data? – qrtt1

+0

możliwy duplikat [Java: Jakie/gdzie są wartości maksymalne i minimalne kalendarza gregoriańskiego?] (Http://stackoverflow.com/questions/2393016/java-what-where- is-the-maximum-andminimal- wartości-of-a-gregoriancalendar) –

+0

Zobacz ten wątek http://stackoverflow.com/questions/2393016/java-what-where-are-the-maximum-andminimal-values-of-a-gregoriancalendar – sproketboy

Odpowiedz

36

Jeśli mówimy o java.util.Date jako znacznika czasu można to zrobić

Date d = new Date(0L) i widać to oznacza Pn sty 01 01:00:00 GMT 1970


Jak tulskiy wskazał możliwe jest przekazanie wartości ujemnej do konstruktora Date. Jeśli mamy to zrobić i użyć formatu daty, który obejmuje erę widzimy:

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)); 

Wyświetlanie: Sun, 02 grudnia 292269055 BC 16:47:04 +0000

55

Nie zapomnę tej daty konstruktora szczęśliwie akceptuje wartości ujemne.

Date date = new Date(Long.MIN_VALUE); 

powraca

Sun Dec 02 22:47:04 BDT 292269055

Chyba że chodzi o godzinie Big Bang dinozaury :)

EDIT

Jako odpowiedź Martin Clayton można użyć klasy Kalendarz, aby sprawdzić era. To spowoduje wyświetlenie 0, co oznacza BCE:

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

Ale wydaje się, że jest to data w przyszłości (rok 292269055), a nie w przeszłości. Wydaje się, że parametr jest interpretowany jako wartość dodatnia. – Grodriguez

+0

@Grodriguez - jaka jest era w tym roku? ;-) –

+0

@Grodriguez: zobacz moją edycję, jest to wartość w przeszłości. –

4

To samo dotyczy klas kalendarza.

Spróbuj tego:

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

Zobaczysz:

Sun Dec 02 16:47:04 GMT 292269055 

Ale domyślny format daty nie obejmuje Era - który jest BCE dla tej dacie.

11

Inne odpowiedzi mogą być poprawne, ale użyj przestarzałych klas.

java.time

Stare klasy date-time (java.util.Date/.Calendar itd.) Zostały wyparte przez java.time ramach wbudowany w Java 8 i późniejszych.

java.time zajęcia są inspirowane przez Joda-Time, zdefiniowane przez JSR 310, przedłużony przez ThreeTen-Extra projektu, back-przeniesiony do Java 6 & 7 projektem ThreeTen-Backport i dostosowany do Android w projekcie ThreeTenABP. Zobacz Tutorial.

Przez chwilę na osi czasu w UTC o rozdzielczości nanoseconds, użyj Instant. Biorąc pod uwagę offset-from-UTC, użyj OffsetDateTime.W przypadku time zone (przesunięcie + reguły dla anomalii) należy użyć ZonedDateTime, ale ze względu na swój charakter nie ma określonego minimum, ani też ZoneId. Aby uzyskać wartość tylko dla daty bez pory dnia i bez strefy czasowej, użyj LocalDate. W przypadku wartości tylko dla pory dnia bez daty i bez strefy czasowej, użyj LocalTime. W przypadku daty i godziny bez strefy czasowej użyj LocalDateTime.

Uwaga: Bądź ostrożny przy użyciu tych wartości jako pewnego rodzaju flagi lub specjalnego znaczenia. Wiele innych bibliotek oprogramowania i baz danych może nie obsługiwać tych ekstremalnych wartości.

W przypadku flagi lub specjalnego znaczenia, na przykład niezerowej wartości "brak dostępnej wartości", sugeruję wybieranie dowolnej chwili, ale unikaj zbliżania się do tak ekstremalnych wartości, zarówno w tył, jak iw przód. Być może Unix epoch reference date, pierwszy moment 1970 roku w UTC, 1970-01-01T00: 00: 00Z. Zdefiniowane jako stała w Javie: Instant.EPOCH

0

Od Date jest oznaczony jako przestarzałe, myślałem nie powinno być kolejny sposób aby obejść ten problem, więc spojrzał na niektóre z metod, i uważam, że ten sposób

Możesz również użyć Long.MIN_VALUE, w czasie, gdy to pisałem, nie szukałem go, a nawet/i nie pamiętałem go. enter image description here

+2

** Niepoprawnie: ** Klasa 'java.util.Date' jest * nie * przestarzała (ale powinna być). Niektóre z jego metod są przestarzałe, ale nie cała klasa.Ponadto ta odpowiedź nie zapewnia dużej wartości dla mojego umysłu. –

+0

Po prostu sprawdzam ponownie i miałeś rację. niektóre z jego metody konstruktora i adn są, ale nie w całości – deadManN