2011-11-24 85 views
13

自1970年1月1日以來,我有幾秒鐘的時間(世紀時間)。將時代秒數轉換爲日期和時間格式的Java

 
1320105600 

我需要將該秒轉換爲以下格式的日期和時間。

 
Friday,November 4,2011 5:00,AM 

我怎樣才能做到這一點?

+5

一個辦法是將瀏覽的javadoc - 例如java.util.Date – Ingo

回答

1

訣竅是使用java.util.Datejava.text.DateFormat來獲得你想要的格式。你可以看看如何在tutorials on the Web中做到這一點。

7
long yourSeconds = 1320105600L; 
Date d = new Date(yourSeconds * 1000); 

這裏javadoc的描述。構造函數需要毫秒。

要顯示此日期在適當的格式,你應該檢查DataFormat

下面是一些例子:

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz"); 
System.out.println(df.format(date)); 
23

如果你侷限於傳統java.util.Datejava.util.Calendar API,您需要考慮時間戳以毫秒爲單位解釋,而不是秒。所以你首先需要乘以1000以獲得以毫秒爲單位的時間戳。

long seconds = 1320105600; 
long millis = seconds * 1000; 

這樣你就可以餵它到a.o. java.util.Date的構造函數,最後使用SimpleDateFormat將期望的日期格式模式中的java.util.Date轉換爲java.lang.String,如果需要的話使用預定義的時區(否則它將使用系統default time zone,該系統本身不是GMT/UTC,因此格式化的時間可能會關閉)。

Date date = new Date(millis); 
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM 

如果你已經在Java8,有一個LocalDateTime#ofEpochSecond()它允許你直接而不需要養活劃時代秒乘以成毫秒的味道。

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC); 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); 
String formattedDate = dateTime.format(formatter); 
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM 
+0

請詳細闡述什麼導致你得到了什麼導致你的預期。我不能直接親眼看到你親眼看到問題。我至少可以知道發佈的代碼對我來說運行良好,並且我得到了最後一行註釋中顯示的結果。 – BalusC

+0

其實我犯了一個錯誤張貼問題clearly.Here IAM與美國芝加哥工作timings.And我秒是這個問題1320105600.The正確的結果是星期二,十一月0升,2011 7:00 AM但IAM越來越週一,10月31日,2011年7:00,下午通過使用上面的代碼。 – androiduser

+0

我知道有一個時區差異,但12小時? – BalusC

2
int seconds = 1320105600; 
Date date = new Date(seconds * 1000); 
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a"); 
System.out.println(sdf.format(date)); 
2

java.time

Answer by BalusC是它指向你使用java.time好。但該答案使用LocalDateTime,其中Instant更合適。 A LocalDateTime而不是在時間軸上的一刻,因爲它故意沒有offset-from-UTCtime zone的概念。

java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date,.Calendar,& java.text.SimpleDateFormatJoda-Time團隊還建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。

大部分的java。時間功能後移植到Java 6 並且還適於在ThreeTenABP到Android。

Instant

UTC時間軸,分辨率高達nanoseconds了一下由Instant類表示。

Instant instant = Instant.ofEpochSecond (1_320_105_600L); 

轉儲到控制檯。您的輸入值是2011年11月1日的第一個時刻UTC。最後的Z是'Zulu'的縮寫,意思是UTC。

System.out.println ("instant: " + instant); 

瞬間:2011-11-01T00:00:00Z

ZonedDateTime

在你的意見,你想提過的America/Chicago出現在鏡頭中看到這個日期時間區。使用proper time zone name。套用一個時區,ZoneId,得到ZonedDateTime對象。我們看到芝加哥在當天UTC時間之後五個小時。

ZoneId zoneId = ZoneId.of ("America/Chicago"); 
ZonedDateTime zdt = instant.atZone (zoneId); 

ZDT:2011-10-31T19:00-05:00 [美國/芝加哥]

字符串

的字符串上面看到的是在標準ISO 8601格式。要以其他格式生成字符串,請使用DateTimeFormatter類。您可以指定自己的自定義模式。但通常最好讓java.time自動定位到編碼在Locale對象中的人類語言和文化規範。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL); 
formatter = formatter.withLocale (Locale.US); 
String output = zdt.format (formatter); 

週一,2011年10月31日晚上7:00:00點CDT

要指定自己的自定義格式,搜索棧溢出了很多例子,更多的討論。

相關問題