yyyy util parse change java date-format simpledateformat

java - util - ¿Cómo controlar SimpleDateFormat parse a 19xx o 20xx?



simpledateformat java 8 (4)

¿Hay alguna manera de analizar la siguiente cadena de fecha como July 23 1916 lugar del July 23 2016 ?

System.out.println(new SimpleDateFormat("yy/MM/dd", Locale.US).parse("16/07/23"));


El Doc Java ( http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html ) dice:

Para analizar el patrón del año abreviado ("y" o "yy"), SimpleDateFormat debe interpretar el año abreviado en relación con algún siglo. Lo hace ajustando las fechas para que estén dentro de los 80 años anteriores y 20 años después de la creación de la instancia de SimpleDateFormat . Por ejemplo, al usar un patrón de "MM / dd / aa" y una instancia de SimpleDateFormat creada el 1 de enero de 1997, la cadena "01/11/12" se interpretaría como el 11 de enero de 2012 mientras que la cadena "05/04 / 64 "se interpretaría como el 4 de mayo de 1964.

El método SimpleDateFormat.set2DigitYearStart(Date) se puede utilizar para fijar el año.


Existe el método set2DigitYearStart que puede usarse para eso. Te permite especificar una fecha de inicio. La fecha analizada estará en el intervalo [fecha de inicio, fecha de inicio + 100 años].

Consulte la documentation para más detalles.


Puede que estés buscando esto.

Calendar cal = Calendar.getInstance(); cal.set( Calendar.YEAR, 1900 ); SimpleDateFormat format = new SimpleDateFormat( "yy/MM/dd", Locale.US ); format.set2DigitYearStart( cal.getTime() ); System.out.println( format.parse( "16/07/23" ) );


Si entiendo tu pregunta entonces si,

SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd", Locale.US); Calendar cal = Calendar.getInstance(Locale.US); cal.set(1900, 0, 1); sdf.set2DigitYearStart(cal.getTime()); System.out.println(sdf.parse("16/07/23"));

Según el SimpleDateFormat.set2DigitYearStart(Date) ,

Establece el período de 100 años en que se interpretarán los años de 2 dígitos para comenzar en la fecha que el usuario especifique.