2011-08-24 150 views
0
String date="2006-06-21T15:57:24.000Z"; 

如何将此字符串转换为Date对象而无需在Android中更改此格式?如何将字符串转换为日期对象?

+6

一个'Date'不** **有一种格式。如果你想以某种方式格式化,可以使用'DateFormat'对象。顺便说一句,这也是*解析**将'String'解析为'Date'对象的方法。 –

+0

[SimpleDateFormat](http://download.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)是您在Java中需要的。不确定关于Android。 – asgs

+0

如果不更改格式,则无法做到这一点。也许你只是简单地打印一个'java.util.Date'对象,只会导致显示'Date#toString()'? (它确实具有不同的固定格式)。然后,您应该先将“Date”转换为“String”,以便将其以所需的格式显示给人类。 – BalusC

回答

1

见的SimpleDateFormat,http://developer.android.com/reference/java/text/SimpleDateFormat.html

该类将字符串转换为日期,并且反之亦然,使用给定的图案。

使用正确的模式创建SimpleDateFormat后,可以使用它将字符串转换为Date,根据需要使用日期,并最终使用相同的SimpleDateFormat实例将Date转换回String。

编辑:澄清时区

在它不是阉给定的字符串指定的问题是一个“纯粹”的ISO 8601日期,而在这种情况下,你是否需要或不支持多个时区,如果那个时区将仅表示为数字(如RFC 822中的+0200),带冒号的数字(ISO 8601允许的+02:00)或名称(EST等)。

如果字符串是纯ISO 8601字符串,那么SimpleDateFormat在解码时区时会遇到一些问题。但是,如果它是“始终Z”(意味着时区数据没有意义,并且您可以放心地忽略它),或者使用不带冒号的数字(如+0200等)或使用时区名称,则SimpleDateFormat可以正确处理它。

+0

SimpleDateFormat不支持基于ISO 8601的格式。 – jarnbjo

+0

@jarnbjo,SimpleDateFormat支持**任何**可访问的日期格式:) – umbr

+0

umbr:不可以。SimpleDateFormat支持根据RFC822而不是ISO8601的时区组件。 – jarnbjo

3

这个下面简单的代码:

private Date parseDate(String date) { 
    SimpleDateFormat curFormater = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.S'Z'"); 
    Date dateObj = new Date(); 
    try { 
     dateObj = curFormater.parse(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return dateObj; 
    } 
+0

它产生如下结果:Wed Jun 21 15:57:24 GMT + 00:00 2006但是我需要2006-06-21T15:57:24.000Z – user878588

+0

它也产生相同的输出Mon Oct 07 04:50:00 PDT 1996 – user878588

0

ISO 8601

输入字符串中恰好是标准ISO 8601格式。最后的ZZulu的缩写,意思是UTC

java.time

的java.time类解析和生成表示日期时间值字符串时使用ISO 8601种格式默认。

Instant类代表UTC中的时间轴上的一个时刻,分辨率为nanoseconds(最多九(9)位小数)。

Instant instant = Instant.parse("2006-06-21T15:57:24.000Z"); 

要生成标准的ISO 8601格式的字符串,调用toString

String output = instant.toString(); 

2006-06-21T15:57:24Z

字符串=日期 - 时间

不要混为一谈日期时间对象与代表值的String。 date-time对象可以解析一个String,并且可以生成一个String,但不是String。换句话说,一个字符串可以被输入和/或输出,但不是日期 - 时间对象本身。

因此,您的问题,“如何将此字符串转换为Date对象而不更改此格式”是没有意义的。

要以ISO 8601以外的格式生成字符串,请将Instant转换为OffsetDateTimeZonedDateTime对象,并使用DateTimeFormatter类。搜索堆栈溢出DateTimeFormatter查看更多讨论和许多示例。

转换

应该避免老java.util.Date类只要有可能。但是,如果您必须与尚未更新为java.time类型的旧代码交互,则可以通过添加到旧日期时间类的新方法将其转换为java.time。

java.util.Date utilDate = java.util.Date.from(instant); 

...并会向另一个方向......

Instant instant = utilDate.toInstant(); 
相关问题