Java 使用什么SimpleDataFormat模式?
我从API收到一个字符串形式的日期,格式如下:Java 使用什么SimpleDataFormat模式?,java,date,simpledateformat,Java,Date,Simpledateformat,我从API收到一个字符串形式的日期,格式如下:“.expires”:“2015年4月28日星期二06:17:40 GMT” 现在我尝试将其传递给java中的Date变量: public static Date getExpireDate(String date) { if (date != null || (date.length() == 0)) { //Date is not null or empty so continue
“.expires”:“2015年4月28日星期二06:17:40 GMT”
现在我尝试将其传递给java中的Date
变量:
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-08
什么模式将解析此字符串?这应该可以:
new SimpleDateFormat("EEE',' dd MMM yyyy HH:mm:ss z", Locale.US)
小写字母“z”表示一般时区,即太平洋标准时间
或太平洋标准时间
或GMT-08:00
tl;博士
什么模式将解析此字符串
我从API收到一个字符串形式的日期,格式如下:“.expires”:“2015年4月28日星期二06:17:40 GMT”
仅使用java.time类
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()
看这个
2015-04-27T22:17:40-08:00[美国/安克雷奇]
GMT-08?
不知道你的意思
GMT
基本上是表示与UTC的偏移量为0小时分秒的老方法。因此,您的输出没有理由比UTC晚八小时(GMT-08
)。您可能会对以下事实感到困惑:java.util.Date::toString
撒谎,动态应用JVM的当前默认时区,从而在日期中创建时区幻觉。从不使用这些遗留日期时间类的原因之一
RFC 1123/RFC 822
您的输入字符串Tue,2015年4月28日06:17:40 GMT
符合(改编自)。这种格式现在已经过时了
ISO 8601
现代协议采用标准格式表示为文本的日期时间值
java.time
虽然java中内置的java.time类在解析/生成字符串时默认使用ISO 8601格式,但DateTimeFormatter
类为这种旧格式提供了预定义的格式化程序:
看这个
zdt.toString():2015-04-28T06:17:40Z
EEE,dd-MMM-yyyy-HH:mm:ss z
对我来说似乎效果不错me@MadProgrammerhh
将在0-12小时内完成,所以我怀疑它是否会work@eis就OP提供的价值而言,它运行正常;)哦,小的z
不是大的z
@BasilBourque我知道。但是看看答案的日期。那是一个Java8非常新的时代。是的,我看到了日期,因此我使用了“now”这个词。我的评论只是给今天的读者的一个便条,让他们知道,虽然这个答案是正确的,但现在已经过时了。
ZonedDateTime
.parse(
"Tue, 28 Apr 2015 06:17:40 GMT" ,
DateTimeFormatter.RFC_1123_DATE_TIME
)
.withZoneSameInstant(
ZoneId.of( "America/Anchorage" )
)
.toString()
String input = "Tue, 28 Apr 2015 06:17:40 GMT" ;
DateTimeFormatter f = DateTimeFormatter.RFC_1123_DATE_TIME ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;