使用什么SimpleDataFormat模式?

hk8txs48  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(371)

我正在从api接收一个字符串形式的日期,格式如下: ".expires": "Tue, 28 Apr 2015 06:17:40 GMT" 现在我想把它传给一个 Date java中的变量:

public static Date getExpireDate(String date) {
        if (date != null || (date.length() == 0)) {
            //Date is not null or empty so continue
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date dateNew = sdf.parse(date);
                return dateNew;
            }catch(Exception e){}
        }
        // return default timeout           
    }

现在我找到了以下文档:
它有一个simelar示例,它呈现如下模式: EEE, d MMM yyyy HH:mm:ss Z 但是我的时区说 GMT . 不是 GMT -08 什么模式将解析这个字符串?

rggaifut

rggaifut1#

这应该起作用:

new SimpleDateFormat("EEE',' dd MMM yyyy HH:mm:ss z", Locale.US)

小写字母“z”表示 General time zone 威奇是 Pacific Standard Time 或者 PST 或者 GMT-08:00

laik7k3q

laik7k3q2#

热释光;博士

什么模式将解析这个字符串? DateTimeFormatter.RFC_1123_DATE_TIME 我从api收到一个字符串形式的日期,格式如下:“.expires”:“周二,2015年4月28日06:17:40 gmt”
只使用java.time类。

ZonedDateTime
.parse(
    "Tue, 28 Apr 2015 06:17:40 GMT" ,
    DateTimeFormatter.RFC_1123_DATE_TIME
)
.toString()

2015-04-28 06:17:40z
你可以看到同一时刻被调整成一个时区。

ZonedDateTime
.parse(
    "Tue, 28 Apr 2015 06:17:40 GMT" ,
    DateTimeFormatter.RFC_1123_DATE_TIME
)
.withZoneSameInstant(
    ZoneId.of( "America/Anchorage" ) 
)
.toString()

请在ideone.com上查看此代码的实时运行。
2015-04-27t22:17:40-08:00[美国/安克雷奇]

gmt-08?

不知道你的意思。 GMT 基本上是说从utc偏移0小时分秒的老方法。因此,您的输出没有理由比utc晚8小时( GMT -08 ). 你可能会对以下事实感到困惑 java.util.Date::toString 撒谎,动态应用jvm当前的默认时区,从而在虚拟机中创建时区的假象 Date . 从不使用这些遗留日期时间类的原因之一。

rfc 1123/rfc 822

输入字符串 Tue, 28 Apr 2015 06:17:40 GMT 符合rfc 1123(改编自rfc 822)。这种格式现在已经过时了。

iso 8601标准

现代协议采用iso8601标准格式来表示文本的日期时间值。

java.time文件

虽然java中内置的java.time类在解析/生成字符串时默认使用ISO8601格式,但是 DateTimeFormatter 类携带此旧格式的预定义格式化程序: DateTimeFormatter.RFC_1123_DATE_TIME .

String input = "Tue, 28 Apr 2015 06:17:40 GMT" ;
DateTimeFormatter f = DateTimeFormatter.RFC_1123_DATE_TIME ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;

请在ideone.com上查看此代码的实时运行。
时间:2015-04-28t06:17:40z

相关问题