2015-05-22 9 views
6

Perché ciò accade? Per il mese e il giorno, penso che Java sta assumendo il precedente mese e il giorno valido, ma non capisco il motivo per cui quest'anno è 2.Java getDate 0000/00/00 restituiscono strani valori

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
Date result = sdf.parse("0000/00/00"); 

System.out.println(result.toString()); 

uscita è:

Sun Nov 30 00:00:00 GMT 2 
+3

confuso quello che stai cercando di fare ... –

+4

@AliGajani Probabilmente sperando di fare una domanda di _famous_ – radimpe

+8

Immondizia, spazzatura. – aioobe

risposta

14

Il calendario gregoriano non ha anno 0.

Anno 0 corrisponde al 1BCE (prima dell'era volgare, noto anche come aC).

Poiché si forniscono 0 per il mese e 0 per il giorno, si ripristina il mese precedente e l'anno precedente.

I.e. 30-Nov-0002 aC.

Date#toString fa non include il suffisso BCE/CE. Sarebbe superfluo nella stragrande maggioranza dei casi.

Se si lavora con date che risalgono a molto tempo, è necessario consultare uno storico.

4

Il punto di partenza per data sarebbe 00010101 ei anno - 1, Mese - Jan e data - 1

quello che hai dato in ingresso è 00000000

Will STA rt con il mese - 00 significa Jan - 1 cioè dicembre

Giorno 00 significa 1 Dec - 1 cioè 30th Nov

Questo spiega la prima parte dell'output. Sun Nov 30 00:00:00 GMT

L'anno è dato 00 che significa anno 1 meno 1. vale a dire 1 BC E come anno torna un'altra volta per mese e data il suo 2 aC.

qui l'anno è indicato come 2.

4

Per impostazione predefinita, SimpleDateFormat tenta di analizzare anche l'input non corretto. È possibile disattivare questa funzione utilizzando setLenient metodo:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
sdf.setLenient(false); 
Date result = sdf.parse("0000/00/00"); 

In questo modo si avrà un'eccezione, che è probabilmente più adatto nel vostro caso:

Exception in thread "main" java.text.ParseException: Unparseable date: "0000/00/00" 
    at java.text.DateFormat.parse(DateFormat.java:366) 
    at Snippet.main(Snippet.java:11) 
Problemi correlati