自1970年1月1日以來,我有幾秒鐘的時間(世紀時間)。將時代秒數轉換爲日期和時間格式的Java
1320105600
我需要將該秒轉換爲以下格式的日期和時間。
Friday,November 4,2011 5:00,AM
我怎樣才能做到這一點?
自1970年1月1日以來,我有幾秒鐘的時間(世紀時間)。將時代秒數轉換爲日期和時間格式的Java
1320105600
我需要將該秒轉換爲以下格式的日期和時間。
Friday,November 4,2011 5:00,AM
我怎樣才能做到這一點?
訣竅是使用java.util.Date
和java.text.DateFormat
來獲得你想要的格式。你可以看看如何在tutorials on the Web中做到這一點。
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));
如果你侷限於傳統java.util.Date
和java.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
請詳細闡述什麼導致你得到了什麼導致你的預期。我不能直接親眼看到你親眼看到問題。我至少可以知道發佈的代碼對我來說運行良好,並且我得到了最後一行註釋中顯示的結果。 – BalusC
其實我犯了一個錯誤張貼問題clearly.Here IAM與美國芝加哥工作timings.And我秒是這個問題1320105600.The正確的結果是星期二,十一月0升,2011 7:00 AM但IAM越來越週一,10月31日,2011年7:00,下午通過使用上面的代碼。 – androiduser
我知道有一個時區差異,但12小時? – BalusC
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));
的Answer by BalusC是它指向你使用java.time好。但該答案使用LocalDateTime
,其中Instant
更合適。 A LocalDateTime
是而不是在時間軸上的一刻,因爲它故意沒有offset-from-UTC或time zone的概念。
的java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date
,.Calendar
,& java.text.SimpleDateFormat
。 Joda-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
要指定自己的自定義格式,搜索棧溢出了很多例子,更多的討論。
一個辦法是將瀏覽的javadoc - 例如java.util.Date – Ingo