Java android中SimpleDateFormat给出错误的日期
我见过 但这些都不适合我 我有一个时间戳:Java android中SimpleDateFormat给出错误的日期,java,android,date,datetime,Java,Android,Date,Datetime,我见过 但这些都不适合我 我有一个时间戳:1503037706145 我使用以下代码将其转换为可读日期: Long leadTime = leadData.getLong("addedOn"); Date date = new Date(leadTime*1000); SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy | hh:mm a"); sdf.setTimeZone(TimeZ
1503037706145
我使用以下代码将其转换为可读日期:
Long leadTime = leadData.getLong("addedOn");
Date date = new Date(leadTime*1000);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy | hh:mm a");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
String formattedDate = sdf.format(date);
它正在返回15/05/49599 11:25:45PM
但当我打开它时,它返回2017年8月18日星期五07:00:14.817
这是正确的。我做错了什么???您当前拥有的时间戳对于Android来说还可以。您需要将其乘以1000才能在www.epochconverter.com上运行,这表明epochconverter使用了不同的格式。只要在Date中加入
leadTime
就可以了。我建议使用DateFormat.format(“mm-dd,hh:mm-a”,timeInMillisec*1000)
由于某些版本的android不支持SimpleDateFormat
其他答案是正确的,即不需要将历元的计数乘以1000,因为您已经有了以毫秒为单位的数字
避免遗留日期时间类
但是其他答案和问题都使用了现在遗留的麻烦类,被java.time类取代。看
java.time
对于Android,请参阅ThreeTen Backport和ThreeTenABP项目
Instant
是UTC时间线上的一个瞬间,解析为纳秒
Instant instant = Instant.ofEpochMilli( 1503037706145 ) ; // Instant is a moment on timeline in UTC resolved to nanoseconds.
String output = instant.toString() ; // Generate string in standard ISO 8601 format.
如果需要,指定时区
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
时间戳以毫秒为单位,OP的戳以毫秒为单位。*1000不需要的结论无论如何都是正确的。@laalto。好的,我会更新的。我一直以为那是几秒钟。我以为epochconverter.com(链接站点)使用的是毫秒,@laalto,你如何判断ts是秒还是毫秒?@0xDEADC0DE你是对的。OP的时间戳以毫秒为单位,因此不需要*1000。1503037706是秒值。删除*1000就是答案。时间戳比基于秒的时间戳多3位数。epochconverter可以猜测这样的时间戳是以毫秒为单位的,即使它通常使用秒作为输入。仅供参考,诸如和
java.text.SimpleTextFormat
之类的麻烦的旧日期时间类现在被这些类所取代。谢谢你,我不知道。我将看到教程:)