如何将字符串转换为日期对象?

时间:2011-08-24 14:19:24

标签: java android date

String date="2006-06-21T15:57:24.000Z";

如何在不更改Android格式的情况下将此字符串转换为Date对象?

5 个答案:

答案 0 :(得分: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;
  }

答案 1 :(得分:2)

使用Time类并解析字符串。然后使用Time toMillis()函数并实例化Date。

http://developer.android.com/reference/android/text/format/Time.html#parse3339(java.lang.String)

答案 2 :(得分:1)

请参阅SimpleDateFormat,http://developer.android.com/reference/java/text/SimpleDateFormat.html

此类使用给定模式将字符串转换为日期,反之亦然。

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

编辑:关于时区的澄清

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

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

答案 3 :(得分:0)

TL;博士

  

如何将此String转换为Date对象

Datejava.time.Instant取代。

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

不改变此格式

日期时间对象没有“格式”。只有文字有格式。

String output = instant.toString() ;  // Generate text in a `String` object in standard ISO 8601 format that represents the value of the `Instant` date-time object.

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。换句话说,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();

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

答案 4 :(得分:0)

我来这里是因为据说这是对Covert RFC3339 DateTime to Date in java的回答。但是,Time是自API级别22开始在Android中不推荐使用的类。

一个简单的答案基于this one

import com.google.api.client.util.DateTime;

Date date = new Date(new DateTime("2006-06-21T15:57:24.000Z").getValue());