我的第一次尝试是:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
Date date = formatter.parse(string);
它抛出ParseException,所以我发现了这个hack:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT");
formatter.setTimeZone(timeZone);
Date date = formatter.parse(string);
它也没用,现在我被卡住了。如果我只是将时区更改为“GMT”,它会毫无问题地解析。
编辑:要解析的示例字符串是“2011-11-29 10:40:24 Etc / GMT”
edit2:我不想完全删除时区信息。我正在编写一个从外部用户接收日期的服务器,因此其他日期可能还有其他时区。 更确切地说:我收到的具体日期来自苹果服务器在iPhone应用程序上购买应用程序后的收据,但我也可以从其他来源收到日期。
答案 0 :(得分:3)
不知道这个问题是否仍然与你相关,但如果你使用Joda时间,这将会有效:
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss ZZZ").parseDateTime(s)
如果没有Joda时间,以下内容将起作用(虽然更多工作):
String s = "2011-11-29 10:40:24 Etc/GMT";
// split the input in a date and a timezone part
int lastSpaceIndex = s.lastIndexOf(' ');
String dateString = s.substring(0, lastSpaceIndex);
String timeZoneString = s.substring(lastSpaceIndex + 1);
// convert the timezone to an actual TimeZone object
// and feed that to the formatter
TimeZone zone = TimeZone.getTimeZone(timeZoneString);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setTimeZone(zone);
// parse the timezoneless part
Date date = formatter.parse(dateString);
答案 1 :(得分:0)
以下代码对我有用
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Etc/GMT")); try { System.out.println( sdf.parse("2011-09-02 10:26:35 Etc/GMT") ); } catch (ParseException e){ e.printStackTrace(); }
答案 2 :(得分:0)
它对我来说不起作用或者我尝试将SimpleDateFormatter的TimeZone设置为“Etc / GMT”,然后在这里格式化一个新日期是输出:
2011-11-30 10:46:32 GMT + 00:00
所以Etc / GMT正在翻译为GMT + 00:00
如果你真的想坚持解析“2011-09-02 10:26:35 Etc / GMT”,那么即使没有考虑明确的时区改变,以下也会有所帮助:
java.text.SimpleDateFormat isoFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'Etc/GMT'");
isoFormat.parse("2010-05-23 09:01:02 Etc/GMT");
工作正常。