我知道有关于此的几个问题。但是我遇到了特定日期模式的问题。这是一个例子:
20130401100000[-03:EST]
我对-03
感到不满,因为根据SimpleDateFormat
文档,它应该有4个数字。我得到的最接近的模式是:
yyyyMMddHHmmss'['Z':'z']'
但由于2位数字它不起作用。这是我用于测试的代码示例:
public static void main(String[] args) throws ParseException {
String input = "20130401100000[-03:EST]";
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(df.format(new Date()));
System.out.println(df.parse(input));
}
当我打印new Date()
时,我得到了这个:
20130528155734[+0000:GMT]
但是当我尝试解析input
时,我得到以下异常:
Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]"
at java.text.DateFormat.parse(DateFormat.java:337)
at Teste.main(Teste.java:17)
答案 0 :(得分:1)
您可以使用以下方式更正格式:
public static void main(String[] args) throws ParseException {
String input = "20130401100000[-03:EST]";
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(df.format(new Date()));
input = input.replace(":","00:");
System.out.println(df.parse(input));
}
如果您使用格式不正确的格式正确格式化日期,则可以使用:
input = input.replaceAll("(\\[[+-]\\d{2}):","$100:");
答案 1 :(得分:0)
JDK 7支持SimpleDateFormat
中较新的模式具体来说,X字符增加了对ISO 8601时区的支持。
使用JDK 7
尝试此模式DateFormat df = new SimpleDateFormat(“yyyyMMddHHmmss'['X':'z']'”);
在JDK 7上,我得到了以下输出。
20130602140935 [Z:GMT] 2013年4月1日13:00:00 GMT