我正在尝试以HTTP 1.1中指定的格式获取Java中的日期字符串。据我所知,这是:
1999年12月31日星期五23:59:59 GMT
时间总是格林尼治标准时间。
从Date / Calendar /?
获取此功能最简单的方法是什么?答案 0 :(得分:50)
如果您使用的是Java 8及更高版本,则可以使用RFC 1123,DateTimeFormatter.RFC_1123_DATE_TIME
的预定义格式化程序。
java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now(ZoneOffset.UTC))
答案 1 :(得分:49)
如果其他人试图在这里找到答案(就像我一样),这里有什么可以解决的问题:
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时区中给出时间。
答案 2 :(得分:25)
如果你正在使用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())
答案 3 :(得分:8)
如果您不担心其他依赖项,可以使用apache DateUtils:
import org.apache.http.impl.cookie.DateUtils;
DateUtils.formatDate(new Date(System.currentTimeMillis()));
// Tue, 17 Apr 2012 18:59:02 GMT
答案 4 :(得分:6)
如果您和我一样,正在尝试格式化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
答案 5 :(得分:5)
某些应用程序要求格式包含RFC7231中每月的两位数字。 Java 8 DateTimeFormatter.RFC_1123_DATE_TIME
使用一位数字:
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
-注意“月”字段中的前导零。
答案 6 :(得分:2)
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
答案 7 :(得分:2)
我知道这是一个迟到的回复,但只是为了完整性而添加它。
你没有提到你需要的字符串。但是如果您需要HTTP响应头,则可以使用HttpServletResponse.setDateHeader()。它为您完成所有格式化。