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

时间:2013-12-18 12:13:03

标签: java parsing date datetime

嘿伙计们,我将日期"01.01.1000 AD"(SimpleDate)作为字符串和dd.MM.yyyy G(SimpleFormat),需要将其解析为1995-12-31T23:59:59Z形式的标准ISO日期({{ 1}})

我的实际代码是:

yyyy-MM-dd'T'hh:mm:ss'Z'

有没有人知道我该怎么做?

4 个答案:

答案 0 :(得分:2)

试试这个:

    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

答案 1 :(得分:1)

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

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();
}

答案 2 :(得分:0)

这样的东西?

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

答案 3 :(得分:0)

尝试一下可能有所帮助:

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