Jika saya memiliki beberapa String yang diformat berbeda, apakah saya memerlukan instance DateFormat terpisah untuk mengurai setiap String?

Saya mencoba mempelajari seluk beluk metode parse() dan format() DateFormat untuk ujian SCJP 6. Saya baru-baru ini mencoba membuat beberapa kode untuk memformat dan mengurai tanggal dan menemukan bahwa metode parse hanya berfungsi jika sebuah String diformat dengan cara yang cocok dengan format instance DateFormat. Apakah itu berarti jika saya menggunakan kelas ini dalam kehidupan nyata dan membaca dokumen yang tanggalnya diformat dalam 6 cara berbeda, saya memerlukan 6 objek DateFormat berbeda agar berhasil mengurai string menjadi objek tanggal?

import java.util.*;
import java.text.*;
import java.io.Console;

class PlayWithDates {
    public static void main(String[] args) {
    String formatted = "";
    Date parsed;
    Date d1 = new Date();
    DateFormat defaultFormat = DateFormat.getDateInstance();
    DateFormat shortFormat = DateFormat.getDateInstance(DateFormat.SHORT);
    formatted = defaultFormat.format(d1);
    System.out.println(formatted);
    formatted = shortFormat.format(d1);
    System.out.println(formatted instanceof String);
    System.out.println(formatted);  

    try {
        parsed = shortFormat.parse(formatted);
        System.out.println(parsed); 
    } catch(ParseException pe) {
        System.out.println(pe);
    }
    try {
        parsed = defaultFormat.parse(formatted);
        System.out.println(parsed); 
    } catch(ParseException pe) {
        System.out.println(pe);
    }
    }
}

Ketika saya menjalankan program ini saya mendapatkan:

Dec 11, 2013
true
12/11/13
Wed Dec 11 00:00:00 MST 2013
java.text.ParseException: Unparseable date: "12/11/13"

Tampaknya bagi saya akan sangat sulit untuk memprediksi kapan sebuah String dapat diurai atau tidak. Haruskah saya melakukan ini dengan contoh Kalender? Terima kasih atas penjelasannya. Aku akan sedikit gila belajar untuk ujian ini.


person paniclater    schedule 11.12.2013    source sumber
comment
Untuk setiap String yang diformat berbeda, Anda memerlukan instance DateFormat untuk mendukungnya...   -  person MadProgrammer    schedule 12.12.2013
comment
Aduh. Jadi, jika Anda mengurai dokumen Tanggal, Anda perlu meramalkan format tanggal apa yang akan digunakan dan kemudian membuat instance DateFormat untuk setiap format yang mungkin dan mencoba/menangkap hingga Anda berhasil mengurai? Sepertinya akan sulit untuk mengikuti ujian.   -  person paniclater    schedule 12.12.2013
comment
Apa yang dapat Anda lakukan (dan sesuatu yang dimiliki Apache Commons) adalah membuat daftar kemungkinan format tanggal dan cukup mengulangi daftar tersebut hingga keinginan berhasil...atau Anda kehabisan format. Perlu anda ingat, jika diberi nilai 12 maka mustahil untuk mengetahui apakah itu hari, bulan atau tahun...   -  person MadProgrammer    schedule 12.12.2013
comment
Cukup adil. Saya melihat bahwa 3/12/12 dapat ditafsirkan sebagai 3 Desember atau 12 Maret. Seperti yang sudah saya perkirakan, masalah ini jauh lebih sulit dipecahkan daripada yang saya perkirakan sebelumnya.   -  person paniclater    schedule 12.12.2013


Jawaban (1)


Karena SimpleDateFormat menerima spesifikasi format dalam konstruktor, Anda memerlukan instance terpisah dari kelas ini untuk setiap format.

person AlexR    schedule 11.12.2013
comment
DateFormat memiliki konstruktor tanpa argumen yang dapat digunakan sebagai berikut: DateFormat df = DateFormat.getInstance() atau opsi DateFormat df = DateFormat.getDateInstance() - person paniclater; 12.12.2013