2014-09-25 115 views
0

我是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)

任何帮助?

回答

2

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 
2

Java7

SimpleDateFormat文档列出的时区为zZX可让你看起来像你想XXX

的Java6

Java7加入X说明符,但6仍具有Zz。但是,你必须先修改字符串,以便它或者没有冒号在时区或具有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

+0

我得到了一个异常与此消息“非法字符模式‘X’”! – user 2014-09-25 14:23:14

+0

@user您正在使用旧版本的Java。 – 2014-09-25 14:25:48

+0

是的,我使用Java 6,任何替代? – user 2014-09-25 14:26:37

0

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