从GWT解析带时区的日期

时间:2015-07-07 09:03:12

标签: java parsing date gwt timezone

我在这个主题上阅读了很多类似的SO问题,但我现在仍然很困惑如何做到这一点......我试着让它变得简单:

我得到了这个字符串:"Sat Jan 24 00:00:00 GMT+100 2015" 不得以任何方式修改

我现在的问题是:我将使用什么样的模式将此String解析为java.util.Date?我试过了:"EEE MMM dd HH:mm:ss z yyyy"但它失败了“不可解决的日期”

我所知道的是:如果我有"Sat Jan 24 00:00:00 GMT+1:00 2015",这是相同的(对吗?),那么我的模式就可以了。但我不能(想要......)修改它。

- > 是否有开箱即用的模式,是或否?

PS:我认为这个问题的结尾是其他所有问题的重复,但如果你这样投票,请另外回答我的大胆问题,因为我无法确定地阅读它

提前致意并表示感谢

2 个答案:

答案 0 :(得分:2)

"小时数必须介于0到23之间,分钟数必须介于00到59之间。例如," GMT + 10"和" GMT + 0010"比格林尼治标准时间早10小时10分钟。"

根据java时区规范http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html,这是我发现的三个字母时区三个字母的时区ID

为了与JDK 1.1.x兼容,还有一些其他三个字母的时区ID(例如" PST"," CTT"," AST&#34 ;)也受支持。但是,它们的使用已被弃用,因为相同的缩写通常用于多个时区(例如," CST"可能是美国和#34;中央标准时间"以及"中国标准时间& #34;),然后Java平台只能识别其中一个。

所以我认为没有任何开箱即用的模式适合你。检查另一个answer

答案 1 :(得分:0)

我不认为有一种模式可以匹配您的时区/偏移量GMT+100。您可以在解析之前修改输入:

String input = "Sat Jan 24 00:00:00 GMT+100 2015";
input = input.replaceAll("([+-])(\\d+?)(\\d{2})", "$1$2:$3");

String pattern = "EEE MMM dd HH:mm:ss z yyyy";
Date date = new SimpleDateFormat(pattern, Locale.ENGLISH).parse(input);