Bagaimana cara mengontrol parsing SimpleDateFormat ke 19xx atau 20xx?

Apakah ada cara untuk mengurai string tanggal berikut sebagai July 23 1916 daripada July 23 2016?

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

person Jason    schedule 23.07.2014    source sumber
comment
kemungkinan duplikat Apa cara terbaik untuk mengurai tanggal dalam format MM/DD/YY dan menyesuaikannya dengan abad saat ini/sebelumnya?   -  person Engineer2021    schedule 23.07.2014


Jawaban (4)


Dokumen Java (http://docs.Oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) mengatakan:

Untuk penguraian dengan pola tahun yang disingkat ("y" atau "yy"), SimpleDateFormat harus menafsirkan tahun yang disingkat tersebut relatif terhadap abad tertentu. Hal ini dilakukan dengan menyesuaikan tanggal menjadi 80 tahun sebelum dan 20 tahun setelah instance SimpleDateFormat dibuat. Misalnya, menggunakan pola "MM/dd/yy" dan instance SimpleDateFormat yang dibuat pada 1 Jan 1997, string "01/11/12" akan ditafsirkan sebagai 11 Jan 2012 sedangkan string "05/04/ 64" akan diartikan sebagai 4 Mei 1964.

Metode SimpleDateFormat.set2DigitYearStart(Date) dapat digunakan untuk memperbaiki tahun.

person reto    schedule 23.07.2014

Jika saya memahami pertanyaan Anda maka ya,

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

Sesuai dengan javadoc SimpleDateFormat.set2DigitYearStart(Date) ,

Menetapkan periode 100 tahun. 2 digit tahun akan ditafsirkan dimulai pada tanggal yang ditentukan pengguna.

person Elliott Frisch    schedule 23.07.2014

Ada metode set2DigitYearStart yang bisa digunakan untuk itu. Ini memungkinkan Anda menentukan tanggal mulai. Tanggal yang diurai akan berada dalam interval [tanggal mulai, tanggal mulai + 100 tahun].

Lihat dokumentasi untuk detailnya.

person Henry    schedule 23.07.2014

Mungkin Anda sedang mencari ini.

    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" ) );
person Swaraj    schedule 23.07.2014
comment
Untuk apa Anda memerlukan Kalender? - person AlexS; 23.07.2014
comment
mengatur tahun dalam format tanggal format.set2DigitYearStart( cal.getTime() ); - person Swaraj; 23.07.2014
comment
Anda tidak salah menggunakan Kalender tetapi jawaban ini memerlukan perbaikan. - person Engineer2021; 23.07.2014
comment
jenis perubahan apa yang Anda sarankan. ada baiknya aku mengingatnya untuk masa depan. - person Swaraj; 23.07.2014
comment
Saya akan mengambil Mungkin Anda mencari ini.. Mungkin itu satu, bukan dua. Jawabannya harus memiliki penjelasan yang cukup tentang apa yang sedang terjadi. Anda memberi spasi di antara tanda kurung, tetapi biasanya itu adalah gaya yang tidak disukai. Jika Anda ingin memasukkan System.out.println maka Anda harus meletakkan baris lain yang menunjukkan contoh keluaran. Jika Anda dapat menghosting contoh yang berfungsi di situs kompiler kode online seperti ideone, itu akan sangat membantu. Semua ini dilakukan untuk membuat jawaban Anda menonjol dan memastikan jawaban Anda tidak mendapat suara negatif. stackoverflow.com/help/how-to-answer - person Engineer2021; 23.07.2014