【问题标题】:Android Date Conversion安卓日期转换
【发布时间】:2012-05-17 21:36:58
【问题描述】:

我收到了一些日期格式,一个 ISO 格式的东西,并且想知道将它解析为时间戳的合适方法。

我的最终目标是在其上进行标准切换以创建“X 分钟/小时/天前”。因此,如果有一个工具已经可以做到这一点,那将是最佳选择。

我试过 joda-time,但它卡住了。

这是一个时间字符串的例子:

2012-05-03 @ 15.55.05.433Z

此外,如果它确实不是 ISO 格式,我可以毫无问题地处理它,例如,@ 等等。

编辑:尝试 1:

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSSZ" );

try
{
  Date myDate = dateFormat.parse( o.getCreationDate().replace( "@", "" ) );

  long minutes = myDate.getTime() / 1000 / 60;

  holder.timeText.setText( minutes + " minutes ago" );
}
catch( ParseException e )
{
  e.printStackTrace();
}

结果:

05-17 16:58:05.003: W/System.err(2915): java.text.ParseException: Unparseable date: "2012-05-09 19:49:47.987Z" (at offset 24)

编辑 2:剥离 Z,并修正毫秒到分钟的转换:

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" );

try
{
  Date myDate = dateFormat.parse( o.getCreationDate().replace( "@ ", "" ).replace( "Z", "" ) );

  Date now = new Date();

  long minutes = ( now.getTime() - myDate.getTime() ) / 1000 / 60;

  holder.timeText.setText( minutes + " minutes ago" );
}
catch( ParseException e )
{
  e.printStackTrace();
}

【问题讨论】:

  • Google for ISO8601 - 我不认为@ 符号是其中的一部分,但自从我阅读 RFC 以来已经有一段时间了。正如 Gokhan 回答的那样 - 您可以使用 SimpleDateFormat 将其(可能没有 @)解析为可用的 Android 日期,然后重新格式化。

标签: java android date time


【解决方案1】:

首先删除@ 字符,然后创建SimpleDateFormat 的实例,该实例将解析您的字符串并返回一个Date 对象,该对象将使您能够获得所需的时间戳。

String myStringDate = "2012-05-03 @ 15.55.05.433Z";
       myStringDate = myStringDate.replace("@ ","");   //Also removes extra whitespace  

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");
Date myDate = dateFormat.parse("your date string");
     myDate.getTime(); //Your timestamp in milliseconds

注意您需要用 try 和 catch 括起来,因为它会引发异常。

【讨论】:

  • OP 示例的时间格式为 HH.mm.ss.SSSZ,其中 HH 是 24 小时制 - 使用 hh 将失败,每小时 15。 SSS 是小数秒(毫秒)。通常在 Z 之后会有一个偏移量,例如 +0100 或类似的,但 Z 本身是指 UTC。另外,您确定 SimpleDateFormat 会处理该 @ 符号吗?
  • 修复了格式,只删除了@,以防它无法处理。我无法测试它,我不在家。感谢@MisterSquonk 提供的小写字母 hh
  • @thisMayhem:我已经编辑了我的帖子,它仍然抛出异常。
  • 索引 24 是字符串的结尾,也许您在字符串中留下了多余的空格?注意@的每一侧都有一个@
  • @thisMayhem:我的错(有点误导Z)。当使用 format(...)DateString 时,它对 SimpleDateFormat 有效,但对相反的情况无效,即,当使用 parse(...)String 创建 Date 时.
【解决方案2】:

使用简单日期格式。看看here

【讨论】:

  • 我将如何将我的字符串放入日期?似乎它只是使用 NOW,而不是提供的已解析字符串。我的问题不是格式化,而是解析。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
相关资源
最近更新 更多