Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中SimpleDateFormat给出错误的日期_Java_Android_Date_Datetime - Fatal编程技术网

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
之类的麻烦的旧日期时间类现在被这些类所取代。谢谢你,我不知道。我将看到教程:)