Java Android日期转换

Java Android日期转换,java,android,date,time,Java,Android,Date,Time,我收到了一些日期格式,一个ISO之类的东西,我想知道用什么合适的方式将其解析为时间戳 我的最终目标是使用标准的开关来创建“X分钟/小时/天之前”,所以如果有一个工具已经做到了这一点,那将是最佳的 我试过joda time,但它被卡住了 以下是时间字符串的示例: 2012-05-03@15.55.05.433Z 此外,如果它确实不是ISO格式,那么我可以毫无问题地处理它的@,等等 编辑:尝试1: SimpleDateFormat dateFormat = new SimpleDateFormat(

我收到了一些日期格式,一个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:不可解析日期:“2012-05-09 19:49:47.987Z”(偏移量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();
}

使用SimpleDataFormat。请看一下使用SimpleDataFormat。查看首先删除
@
字符,然后创建一个
SimpleDataFormat
实例,该实例将解析字符串并返回一个
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-and-catch可能引发异常,因此您需要用try-and-catch来包围它。

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

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-and-catch来包围,因为它可能引发异常。

谷歌ISO8601-我不认为
@
符号是其中的一部分,但是我已经有一段时间没有阅读RFCs了。正如Gokhan所回答的-你可以使用SimpleDataFormat将其解析(可能没有@)为一个可用的Android日期,然后重新格式化.Google for ISO8601-我不认为
@
符号是其中的一部分,但是我已经有一段时间没有阅读RFC了。正如Gokhan所回答的-你可以使用SimpleDataFormat将其解析(可能没有@)为一个可用的Android日期,然后重新格式化。不过,我该如何将我的字符串转换为日期呢?似乎它现在正在使用,而不是提供的解析字符串。我的问题不是如何格式化,而是如何解析。但是我该如何将字符串输入到日期中呢?似乎它现在正在使用,而不是提供的解析字符串。我的问题不是格式化,而是解析。OP示例的时间格式是HH.mm.ss.SSSZ,其中HH是24小时时钟-使用
HH
将以15小时为单位失败。SSS是分数秒(毫秒)。通常在Z之后会有一个偏移量,如+0100或类似的偏移量,但Z本身指UTC。另外,您确定SimpleDataFormat会处理@symbol吗?修复了该格式,并删除了
@
,以防它无法处理该格式。不过我不能测试,我不在家。谢谢你的小写字母@MisterSquonk@thisMayhem:我已经编辑了我的帖子,它仍然抛出一个异常。索引24是字符串的结尾,也许你在字符串中留下了额外的空白?注意,
@
@这个混乱:我的坏(对
Z
有点误导)。当从
日期开始使用
SimpleDataFormat(…)
a
字符串
格式化(…)时,它对
SimpleDataFormat
有效,但对相反的情况,即使用
解析(…)时,它无效
字符串创建
日期
。OP示例的时间格式为HH.mm.ss.SSSZ,其中HH为24小时时钟-使用
HH
将以15小时失败。SSS是分数秒(毫秒)。通常在Z之后会有一个偏移量,如+0100或类似的偏移量,但Z本身指UTC。另外,您确定SimpleDataFormat会处理@symbol吗?修复了该格式,并删除了
@
,以防它无法处理该格式。不过我不能测试,我不在家。谢谢你的小写字母@MisterSquonk@thisMayhem:我已经编辑了我的帖子,它仍然抛出一个异常。索引24是字符串的结尾,也许你在字符串中留下了额外的空白?注意,
@
@这个混乱:我的坏(对
Z
有点误导)。当从
日期
使用
SimpleDateFormat(…)
格式化
字符串
时,它对
SimpleDateFormat
有效,但对相反的情况无效,即使用
解析(…)
字符串创建
日期