嘿伙计们,我将日期"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'
有没有人知道我该怎么做?
答案 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);
}