Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串转换为日期对象?_Java_Android_Date - Fatal编程技术网

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

Java 如何将字符串转换为日期对象?,java,android,date,Java,Android,Date,如何将此字符串转换为日期对象而不在Android中更改此格式?请参阅SimpleDataFormat 此类使用给定的模式将字符串转换为日期,反之亦然 使用正确的模式创建SimpleDataFormat后,可以使用它将字符串转换为日期,随意使用日期,并最终使用同一SimpleDataFormat实例将日期转换回字符串 编辑:关于时区的澄清 在问题中,未指定给定字符串是否为“纯”ISO 8601日期,以及在这种情况下是否需要支持多个时区,如果该时区将仅表示为数字(+0200,如RFC 822所示)、

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

请参阅SimpleDataFormat

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

使用正确的模式创建SimpleDataFormat后,可以使用它将字符串转换为日期,随意使用日期,并最终使用同一SimpleDataFormat实例将日期转换回字符串

编辑:关于时区的澄清

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

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

请参阅SimpleDataFormat

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

使用正确的模式创建SimpleDataFormat后,可以使用它将字符串转换为日期,随意使用日期,并最终使用同一SimpleDataFormat实例将日期转换回字符串

编辑:关于时区的澄清

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


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

使用time类并解析字符串。然后使用Time toMillis()函数并实例化一个日期


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


这里有一些简单的代码:

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

下面是简单的代码:

String date="2006-06-21T15:57:24.000Z";
tl;博士 如何将此字符串转换为日期对象

Date
java.time.Instant
取代

  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;
  }
不更改此格式

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

Instant.parse( "2006-06-21T15:57:24.000Z" )
ISO 8601 该输入字符串恰好是标准格式。末尾的
Z
Zulu
的缩写,意思是

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

该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)

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

2006-06-21T15:57:24Z

字符串!=日期时间 不要将日期时间对象与表示该值的字符串合并。日期时间对象可以解析字符串,也可以生成字符串,但不是字符串。换句话说,字符串可以输入和/或输出,但不是日期时间对象本身

因此,您的问题“如何在不更改此格式的情况下将此字符串转换为日期对象”毫无意义

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

转化 尽可能避免使用旧的
java.util.Date
类。但是,如果必须与尚未更新为java.time类型的旧代码进行接口,则可以通过添加到旧日期时间类中的新方法将java.time转换为java.time或从java.time转换为java.time

String output = instant.toString(); 
…然后去另一个方向

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

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(tl;dr 如何将此字符串转换为日期对象

      Date
      java.time.Instant
      取代

        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;
        }
      
      不更改此格式

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

      Instant.parse( "2006-06-21T15:57:24.000Z" )
      
      ISO 8601 该输入字符串恰好是标准格式。末尾的
      Z
      Zulu
      的缩写,意思是

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

      该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)

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

      2006-06-21T15:57:24Z

      字符串!=日期时间 不确认
      import com.google.api.client.util.DateTime;
      
      Date date = new Date(new DateTime("2006-06-21T15:57:24.000Z").getValue());