2009-02-11 31 views
57

我有一個包含UNIX Epoch time的字符串,我需要將它轉換爲Java Date對象。到Java的Unix時代日期對象

String date = "1081157732"; 
DateFormat df = new SimpleDateFormat(""); // This line 
try { 
    Date expiry = df.parse(date); 
} catch (ParseException ex) { 
    ex.getStackTrace(); 
} 

標記的行是我遇到麻煩的地方。我無法弄清SimpleDateFormat()的參數應該是什麼,或者即使我應該使用SimpleDateFormat()。

+0

見[我的詳細的解答](http://stackoverflow.com/a/20370992/642706)到毫秒之間轉換成日期時間,使用約達時庫的示例代碼類似的問題。 – 2013-12-06 04:12:36

回答

85

如何只:

Date expiry = new Date(Long.parseLong(date)); 

編輯:按rde6173的答案,並採取在問題中指定的輸入定睛一看,‘1081157732’似乎是一個秒爲基礎的時代值,所以你會想從parseLong()1000長乘以轉換到毫秒,這是Java的日期構造函數使用,所以:

Date expiry = new Date(Long.parseLong(date) * 1000); 
+4

技術上這不是不正確的,因爲它不考慮閏秒? – 2011-10-29 13:23:02

+0

* 1000L後,它工作。 – 2013-06-24 07:17:27

+1

Maciej,op的「基於秒數」的時代已經佔了閏秒,這是「秒」的基礎。所以這個答案是正確的。 – thecarpy 2014-10-21 07:39:48

5
long timestamp = Long.parseLong(date) 
Date expiry = new Date(timestamp * 1000) 
0

嗚嗚....如果我不誤N,Unix紀元時間其實是一回事

System.currentTimeMillis() 

所以寫

try { 
    Date expiry = new Date(Long.parseLong(date)); 
} 
catch(NumberFormatException e) { 
    // ... 
} 

應該工作(和快得多該日期解析)

33

時代是秒數 1970年1月1日以後..

所以:

String epochString = "1081157732"; 
long epoch = Long.parseLong(epochString); 
Date expiry = new Date(epoch * 1000); 

欲瞭解更多信息: http://www.epochconverter.com/

0

更重要的是,使用JodaTime。分析字符串和字符串更容易。線程也是安全的。值得您花時間實施它。

0

將秒時間戳轉換爲毫秒時間戳。你可以像這樣使用TimeUnit API。

long milliSecondTimeStamp = MILLISECONDS.convert(secondsTimeStamp, SECONDS)

12

java.time

使用java.time框架構建在Java 8和更高版本。

import java.time.LocalDateTime; 
import java.time.Instant; 
import java.time.ZoneId; 

long epoch = Long.parseLong("1081157732"); 
Instant instant = Instant.ofEpochSecond(epoch); 
ZonedDateTime.ofInstant(instant, ZoneOffset.UTC); # ZonedDateTime = 2004-04-05T09:35:32Z[UTC] 

在這種情況下,你應該更好地利用ZonedDateTime將其標記爲日期UTC時區,因爲時代在UTC定義由Java中使用Unix time

ZoneOffset包含UTC時區的方便常數,如上面最後一行所示。它的超類ZoneId可用於調整到其他時區。

ZoneId zoneId = ZoneId.of("America/Montreal");