关于解析:如何在Java中解析“dd.MM.yyyy G”到ISO-Date?

How do I parse “dd.MM.yyyy G” to ISO-Date in Java?

本问题已经有最佳答案,请猛点这里访问。

嘿家伙我把日期"01.01.1000 AD"(SimpleDate)作为字符串和dd.MM.yyyy G(SimpleFormat)并需要以1995-12-31T23:59:59Z(yyyy-MM-dd'T'hh:mm:ss'Z')的形式将其解析为标准ISO-Date

我的实际代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String getISODate(String simpleDate, String simpleFormat, String isoFormat) throws ParseException {
    Date date;
    if (simpleFormat.equals("long")) {
        date = new Date(Long.parseLong(simpleDate));
    } else {
        SimpleDateFormat df = new SimpleDateFormat(simpleFormat);
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        // or else testcase
        //"1964-02-24" would
        // result"1964-02-23"
        date = df.parse(simpleDate);
    }
    return getISODate(date, isoFormat);
}

有谁知道我该怎么做?


试试这个:

1
2
3
    String string ="01.01.1000 AD";
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy GG");
    Date date = dateFormat.parse(string);

日期格式中的G代表时代。

请参阅http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html


这有望帮助[使用标准jdk很棘手,但至少可能 - 并且JSR 310不支持此功能:-(]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DateFormat df = new SimpleDateFormat("dd.MM.yyyy GG", Locale.US);
DateFormat iso = new SimpleDateFormat("yyyy-MM-dd");
try {
    Date d = df.parse("01.01.1000 AD");
    System.out.println(iso.format(d)); // year-of-era => 1000-01-01 (not iso!!!)

    // now let us configure gregorian/julian date change right for ISO-8601
    GregorianCalendar isoCalendar = new GregorianCalendar();
    isoCalendar.setGregorianChange(new Date(Long.MIN_VALUE));
    iso.setCalendar(isoCalendar);
    System.out.println(iso.format(d)); // proleptic iso year: 1000-01-06
} catch (ParseException ex) {
    ex.printStackTrace();
}


尝试它可能会有所帮助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String getISODate(String simpleDate, String simpleFormat, String isoFormat) throws ParseException {
    Date date;
    if (simpleFormat.equals("long")) {
        date = new Date(Long.parseLong(simpleDate));
    } else {
        SimpleDateFormat df = new SimpleDateFormat(simpleFormat);
        df.setTimeZone(TimeZone.getTimeZone("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
        // or else testcase
        //"1964-02-24" would
        // result"1964-02-23"
        date = df.parse(simpleDate);
    }
    return getISODate(date, isoFormat);
}


像这样的东西?

1
2
3
String date ="01.01.1000 AD";  
SimpleDateFormat parserSDF = new SimpleDateFormat("dd.mm.yyyy GG");  
System.out.println(parserSDF.parse(date));