在的Android,則可以使用ThreeTen Backport,對Java 8的新的日期/時間類有很大的backport ,連同ThreeTenABP(更多關於如何使用它here)。
這個API提供的日期,比過時的Date
和Calendar
更好工作的好辦法(老班(Date
,Calendar
和SimpleDateFormat
)有lots of problems,他們正在被新的API取代)。
要想從一個時間戳值的日期(假設1388620296020
是毫秒從Unix紀元數),則可以使用org.threeten.bp.Instant
類:
// create the UTC instant from 1388620296020
Instant instant = Instant.ofEpochMilli(1388620296020L);
System.out.println(instant); // 2014-01-01T23:51:36.020Z
輸出是2014-01-01T23:51:36.020Z
,因爲Instant
是始終以UTC。如果你想將其轉換爲一個日期/時間在另一個時區,你可以使用org.threeten.bp.ZoneId
類,並創建一個org.threeten.bp.ZonedDateTime
:
ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris"));
System.out.println(z); // 2014-01-02T00:51:36.020+01:00[Europe/Paris]
輸出將是2014-01-02T00:51:36.020+01:00[Europe/Paris]
(轉換爲巴黎時區相同的UTC時刻)。
請注意,API避免使用3個字母的時區名稱(如ECT
或CST
),因爲它們是ambiguous and not standard。始終傾向於使用全名(如Europe/Paris
或America/Los_Angeles
,由IANA database定義) - 您可以通過致電ZoneId.getAvailableZoneIds()
獲取所有可用名稱。
如果你要打印的日期以不同的格式,你可以使用一個org.threeten.bp.format.DateTimeFormatter
(請參閱javadoc看到所有可能的格式):
ZonedDateTime z = instant.atZone(ZoneId.of("Europe/Paris"));
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SSS Z");
System.out.println(fmt.format(z)); // 02/01/2014 00:51:36.020 +0100
'我已經嘗試過他們沒有success'表明您已經嘗試過的東西,所以我們可以幫助修復它。直到你顯示,我們不能相信你已經嘗試過。 –
不太確定,如果我已經理解了你:你是想用時間,天,小時,分鐘,秒來表示你的'時間'變量和現在時間戳**之間的時差**嗎? –
[轉換時間到目前爲止的可能的重複](https://stackoverflow.com/questions/7740972/convert-epoch-time-to-date) –