[英]Java: Time in milliseconds to HTTP format?
我有一個File對象,我希望將該文件的最后修改日期轉換為HTTP格式 。 格式是GMT時間,如:
Mon, 10 Feb 2014 16:17:37 GMT
我知道java.io.File有一個方法lastModified()
,它以毫秒為單位返回時間。 我也可以在毫秒內將該時間傳遞給java.util.Date類的構造函數。 但是以HTTP格式獲取字符串的最簡單方法是什么?
謝謝。
SimpleDateFormat sdf =
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String httpDate = sdf.format(new Date(file.lastModified()));
有關詳細信息,請閱讀以下Joda-Time
部分。 現在處於維護模式的Joda-Time項目建議遷移到java.time類。
Instant
類表示UTC時間軸上的一個時刻,分辨率為納秒 (最多九(9)位小數)。
long milliseconds = … ;
Instant instant = Instant.ofEpochMilli( milliseconds ); // Or use Instant.now() to experiment.
要進行格式化,請轉換為OffsetDateTime
。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
DateTimeFormatter
類為您所需的格式提供現成的格式化程序 。 該格式由RFC 1123標准定義。
String output = odt.format ( DateTimeFormatter.RFC_1123_DATE_TIME );
2017年1月11日星期三21:35:19 GMT
對於其他格式化程序,我會說總是指定Locale
。 但RFC 1123的特定格式化程序根據RFC要求硬編碼為英語。 因此,指定Locale
對輸出沒有影響。
只是為了它,它是Meno Hochschild正確答案中使用Joda-Time 2.3庫的相同類型的代碼。
幾個筆記......
long
而不是int
(64位vs 32位)。 // Note how the variable for milliseconds is a "long" not "int".
long milliseconds = DateTime.now().getMillis(); // Get milliseconds from java.io.File method "lastModified", or wherever.
DateTime dateTime = new DateTime( milliseconds, DateTimeZone.UTC );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "EEE, dd MMM yyyy HH:mm:ss 'GMT'" ).withZone( DateTimeZone.UTC ).withLocale( java.util.Locale.ENGLISH );
String httpDateTime = formatter.print( dateTime );
轉儲到控制台......
System.out.println( "milliseconds: " + milliseconds );
System.out.println( "dateTime: " + dateTime );
System.out.println( "httpDateTime: " + httpDateTime );
跑的時候......
milliseconds: 1392075528617
dateTime: 2014-02-10T23:38:48.617Z
httpDateTime: Mon, 10 Feb 2014 23:38:48 GMT
HTTP 1.1規范確實需要這種格式。 因此,如果您需要它,請使用它。 但是要知道,互聯網社區已經在很大程度上采用了更合理的ISO 8601格式來實現當前的協議。 ISO格式為YYYY-MM-DDTHH:MM:SS.ssssss+00:00
,如上面第二行輸出所示。 Joda-Time庫使用ISO 8601作為大多數用途的默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.