解析复杂的日期格式
问题描述:
我是java程序设计的初学者。解析复杂的日期格式
我想分析复杂的日期格式:YYYY-MM-DDthh:mm:ssTZD
,例如2014-09-24T21:32:39-04:00
我尝试这样:
String str_date="2014-09-24T21:32:39-04:00";
DateFormat formatter = new SimpleDateFormat("YYYY-MM-DDthh:mm:ss");
Date date = (Date)formatter.parse(str_date);
但对于时区部分(-04:00)
,我不知道该用什么(after the :ss)
任何帮助?
答
Java < 7
那么你需要从您的输入删除':'
,并对其进行分析:
下面是一个例子:
public static void main(String[] args) throws ParseException {
String str_date="2014-09-24T21:32:39-04:00";
str_date = str_date.replaceAll(":(\\d\\d)$", "$1");
System.out.println("Input modified according to Java 6: "+str_date);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date = (Date)formatter.parse(str_date);
System.out.println(date);
}
个
打印:
Input modified according to Java 6: 2014-09-24T21:32:39-0400
Wed Sep 24 21:32:39 EDT 2014
答
Java7
SimpleDateFormat
文档列出的时区为z
,Z
和X
可让你看起来像你想XXX
。
的Java6
Java7加入X
说明符,但6仍具有Z
和z
。但是,你必须先修改字符串,以便它或者没有冒号在时区或具有GMT
前-
:
String str_date="2014-09-24T21:32:39-04:00";
int index = str_date.lastIndexOf('-');
str_date = str_date.substring(0, index) + "GMT" + str_date.substring(index+1);
然后你如果要使用可以使用格式说明z
答
ISO 8601
你的字符串与ISO 8601标准。该标准是由两个优良日期时库用作分析和生成字符串的缺省:
- Joda-Time
- java.time包(捆绑与Java 8,启发约达时间,定义由JSR 310 )
只是将您的字符串传递给构造函数或工厂方法。内置的格式化程序会自动用于解析字符串。
与java.util.Date不同,在这两个库中,日期 - 时间对象知道它自己分配的时区。自UTC时间1970年初Unix时期开始,字符串末尾指定的UTC偏移量用于计算毫秒数(或java.time中的纳秒数)。计算完成后,所得到的日期时间将被分配一个您选择的时区。在这个例子中,我随意分配一个印度时区。为了清楚起见,本示例使用UTC创建第二个日期 - 时间对象。
乔达时间
DateTimeZone timeZoneIndia = DateTimeZone.forID("Asia/Kolkata");
DateTime dateTimeIndia = new DateTime("2014-09-24T21:32:39-04:00" , timeZoneIndia);
DateTime dateTimeUtc = dateTimeIndia.withZone(DateTimeZone.UTC);
我得到了一个异常与此消息“非法字符模式‘X’”! – user 2014-09-25 14:23:14
@user您正在使用旧版本的Java。 – 2014-09-25 14:25:48
是的,我使用Java 6,任何替代? – user 2014-09-25 14:26:37