Java Android日期转换
我收到了一些日期格式,一个ISO之类的东西,我想知道用什么合适的方式将其解析为时间戳 我的最终目标是使用标准的开关来创建“X分钟/小时/天之前”,所以如果有一个工具已经做到了这一点,那将是最佳的 我试过joda time,但它被卡住了 以下是时间字符串的示例: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(
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
有效,但对相反的情况无效,即使用解析(…)
从字符串创建日期。