带时区的简单日期格式

SimpleDateFormatter with Timezone

我要解析以下日期格式

26.04.2015 17:00 CET

我使用了以下模式字符串

dd.MM.yyyy HH:mm z

我正在使用 java.text.SimpleDateFormat。但是当我尝试解析给定的字符串时,我收到 ParseException.

我正在使用以下代码

String datestring = "26.04.2015 17:00 CET";
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm z");
Date dt = format.parse(datestring)

谁能告诉我哪里做错了?

使用小写 z 而不是大写 Z

你将有 dd.MM.yyyy HH:mm z.

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm z");
System.out.println(sdf.parse("26.04.2015 17:00 CET", new ParsePosition(0)));

Sun Apr 26 12:00:00 EDT 2015

你可以看到一个演示 here

您可以查看 SimpleDateFormat here.

参数的完整说明

尝试SimpleDateFormat("dd.MM.yyyy HH:mm")

Benjy Kessler 的回答很好(我的赞成票)。符号z用于解析时区名称和缩写,符号Z用于解析偏移量。

唯一仍然缺少的一点是语言环境。您必须将语言环境设置为英语,因为 "CET" 是 "Central European Time" 的英文缩写。在德语中应该是 "MEZ"。

所以请尝试表达

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm z", Locale.ENGLISH);

顺便说一下,您输入的内容似乎不一致,因为您的日期是在四月,但 "CET" 建议使用冬季时间(而欧盟 EU 已经切换为夏季时间)。我希望你的格式对象足够宽容。