在Java中以HTTP格式获取日期

时间:2011-10-10 00:35:14

标签: java http date time

我正在尝试以HTTP 1.1中指定的格式获取Java中的日期字符串。据我所知,这是:

  

1999年12月31日星期五23:59:59 GMT

时间总是格林尼治标准时间。

从Date / Calendar /?

获取此功能最简单的方法是什么?

8 个答案:

答案 0 :(得分:50)

java.time

如果您使用的是Java 8及更高版本,则可以使用RFC 1123DateTimeFormatter.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

这将根据 RFC 822 RFC1123格式化您的日期。

答案 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()。它为您完成所有格式化。