【问题标题】:How format date in java/android如何在 java/android 中格式化日期
【发布时间】:2014-01-19 19:13:44
【问题描述】:

我正在尝试开发一个 android 应用程序,因为我从服务器获得了一些数据。

在这里我需要转换一个给定格式的日期 "2013-12-31T15:07:38.6875000-05:00" 我需要将其转换为日期对象或日历对象,我们该怎么做?

我已尝试使用下面给出的代码。但这并没有达到我的预期

String dateString="2013-12-31T15:07:38.6875000-05:00";
Date date = null;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
try {
    date = df.parse(dateString);
} catch (ParseException e) {
    e.printStackTrace();
}
return date;

【问题讨论】:

  • 这里的 dateString 是什么?
  • 我刚刚编辑了我的问题??
  • 仅供参考,该格式是标准的ISO 8601 格式。
  • 这还没有解决吗?

标签: java android datetime simpledateformat date-formatting


【解决方案1】:

您的格式字符串与您获得的日期格式不匹配。您应该使用以下格式字符串:

"yyyy-MM-dd'T'HH:mm:ss.SSSX"

【讨论】:

  • 好的。你能打印出dateString 的值吗?它包含什么价值?如果它是您显示的值,它应该可以工作。
  • 它与我在问题中提到的相同。 2013-12-31T15:07:38.6875000-05:00
  • 哦..终于清除了...我刚刚从末尾删除了“z”
  • @user1672337 实际上,您需要使用X 而不是Z。时区为 ISO 8601 格式。
  • @user1672337 删除 Z 不会给你正确的时间。您只是丢弃了时区本身。这是不正确的。使用X 而不是Z
【解决方案2】:

第 1 步:

当您将2013-12-31T15:07:38.6875000-05:00 作为日期值时,您需要定义一种格式来解析日期。

String myDateString= "2013-12-31T15:07:38.6875000-05:00";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
try {
    date = df.parse(myDateString);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

第 2 步: 解析日期后,您可以将其格式化为所需的格式。

例如:让我们将解析后的Date对象转换成yyyy-MM-dd的值。

SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd");
String strNewDate = newFormat.format(date);

【讨论】:

  • 这里有一些问题,当我们将此日期转换为 2013 年 12 月 31 日星期二 17:02:13 GMT 2013 时,时间会发生一些变化,因为我最后不能使用“z”跨度>
【解决方案3】:

您可以为字符串格式化程序使用以下格式

"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

来源:SimpleDateFormat ignoring month when parsing

阅读:http://developer.android.com/reference/java/text/SimpleDateFormat.html

【讨论】:

    【解决方案4】:

    使用此代码

     String string = "2013-12-31T15:07:38.6875000-05:00";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    

    Simple date formats

    【讨论】:

      【解决方案5】:

      如果您使用的是Joda-Time 库,则可以跳过格式化程序并将ISO 8601 字符串直接提供给DateTime 对象的构造函数。

      // © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
      // import org.joda.time.*;
      // import org.joda.time.format.*;
      
      DateTime dateTime_DefaultTimeZone = new DateTime( "2013-12-31T15:07:38.6875000-05:00" );
      

      输出到本地化的时区和语言……

      String localizedOutput = DateTimeFormat.forStyle("LS").withLocale(Locale.CANADA_FRENCH).withZone( DateTimeZone.forID( "America/Montreal" ) ).print( dateTime_DefaultTimeZone );
      

      转储到控制台...

      System.out.println( "dateTime_DefaultTimeZone: " + dateTime_DefaultTimeZone );
      System.out.println( "localizedOutput: " + localizedOutput );
      

      运行时……

      dateTime_DefaultTimeZone: 2013-12-31T12:07:38.687-08:00
      localizedOutput: 31 décembre 2013 15:07
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        相关资源
        最近更新 更多