2017-08-18 39 views
-4

給人錯誤的日期我見過SimpleDateFormat的android系統

Convert from UNIX Timestamp to "Today at: currentTime" using Java

Convert unix time stamp to date in java

但這些都不是爲我工作。

我有一個時間戳: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

但是,當我在檢查this,它返回Friday, 18 August 2017 07:00:14.817

這是正確的。我究竟做錯了什麼 ??

+1

FYI,麻煩的老的日期 - 時間類,如['java.util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date .html),['java.util.Calendar'](https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html)和'java.text.SimpleTextFormat'現在[遺留](https://en.wikipedia.org/wiki/Legacy_system),由[java.time]代替(https://docs.oracle.com/javase/8/docs/api/java/time /package-summary.html)類。請參見[Oracle教程](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 –

+1

感謝@BasilBourque,我不知道。我會看到教程:) – mrid

回答

1

您當前擁有的時間戳對於Android而言可以。事實上,您需要將其乘以1000才能在www.epochconverter.com上運行,這表明epochconverter使用不同的格式。只需在Date中扔leadTime,你應該沒問題。

+1

時間戳以毫秒爲單位,OP的標記以毫秒爲單位。無論如何,* 1000的結論不是必需的。 – laalto

+0

@laalto。好的,我會更新它。我一直認爲這是秒。我以爲epochconverter.com(鏈接的網站)使用毫秒 – 0xDEADC0DE

+0

它現在正在工作!謝謝:) – mrid

0

我建議使用DateFormat.format("MMM dd, hh:mm a", timeInMillisec * 1000),因爲某些版本的android不支持SimpleDateFormat

2

其他答案是正確的關於不需要乘以千分之一,因爲你已經有一個以毫秒爲單位的數字。

避免遺留日期時類

但其他的答案和問題都使用麻煩的類,現在是遺產,由java.time類取代。見Oracle Tutorial

java.time

對於Android,看到ThreeTen,反向移植和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) ;