Java HTTP 1.1で指定された形式の日付の文字列を取得しようとしています。私が知る限り、これは次のとおりです。
1999年12月31日金曜日23:59:59 GMT
時間は常にGMTです。
Date/Calendar /からこれを取得する最も簡単な方法は何ですか?
他の誰かがここで答えを見つけようとする場合(私がしたように)、ここでトリックが行われます:
String getServerTime() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat(
"EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat.format(calendar.getTime());
}
サーバーが英語を話し、GMTタイムゾーンで時間を与えるように設定するため。
Joda-Time を使用している場合(Javaで日付と時刻を処理する場合はこれを強くお勧めします)、次のことができます。
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
...
private static final DateTimeFormatter RFC1123_DATE_TIME_FORMATTER =
DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss 'GMT'")
.withZoneUTC().withLocale(Locale.US);
...
RFC1123_DATE_TIME_FORMATTER.print(new DateTime())
一部のアプリケーションでは、形式に RFC7231 に従って2桁の曜日を含める必要があります。 Java 8 _DateTimeFormatter.RFC_1123_DATE_TIME
_は1桁を使用します:
_System.out.println(DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now(ZoneOffset.UTC)));
_
出力:_Wed, 1 Aug 2018 14:56:46 GMT
_
一部のアプリケーションはそれを好まない。 Joda-timeまたはJava8より前のSimpleDateFormat
を使用する古い回答を使用する前に、動作するJava-8 DateTimeFormatter
を次に示します。
DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss O")
さて、これを行うと:
_DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss O");
System.out.println(formatter.format(ZonedDateTime.now(ZoneOffset.UTC)));
_
_Wed, 01 Aug 2018 14:56:46 GMT
_を取得します-月の日フィールドの先頭のゼロに注意してください。
私のように、Java 8 Java.time.Instant
タイムゾーンをフォーマッタに明示的に追加する必要があります。このような:
Instant instant = Instant.now();
String formatted = DateTimeFormatter.RFC_1123_DATE_TIME
.withZone(ZoneOffset.UTC)
.format(instant);
System.out.println(formatted);
どの印刷:
2016年3月15日火曜日14:45:34 GMT
これは遅い応答であることは知っていますが、完全を期すために追加したかっただけです。
文字列が必要なものについては言及しませんでした。ただし、HTTP応答ヘッダーに必要な場合は、HttpServletResponse.setDateHeader()を使用できます。すべての書式設定が行われます。
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
System.out.println("Date: " + dateFormat.format(calendar.getTime()));
あなたはそれで遊ぶことができます。ドキュメントはこちらです: http://download.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html