簡體   English   中英

Java:HTTP格式的時間(以毫秒為單位)?

[英]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()));

java.time

有關詳細信息,請閱讀以下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位)。
  • HTTP規范要求使用英語作為日期和月份的名稱。 所以我們應該明確指定英語,以防我們的代碼在JVM上運行,其中英語不是默認的Locale。

示例代碼

 // 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

ISO 8601

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM