我是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)
任何帮助?
答案 0 :(得分:2)
<强> 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
答案 1 :(得分: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 :(得分:0)
您的字符串符合ISO 8601标准。该标准用作两个出色的日期时间库解析和生成字符串的默认值:
仅将您的字符串传递给构造函数或工厂方法。内置格式化程序会自动用于解析字符串。
与java.util.Date不同,在这两个库中,日期时间对象知道自己分配的时区。在字符串末尾指定的UTC偏移量用于计算自UTC时区1970年初的Unix纪元以来的毫秒数(或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 );