我在尝试解析时遇到上述异常。我尝试了以下日期格式,
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss ", Locale.ENGLISH);
答案 0 :(得分:1)
SimpleDateFormat
课程不仅已经过时了,而且也是出了名的麻烦。我建议您停止使用它,并使用java.time
现代Java日期和时间API,也称为JSR-310。与它合作非常好。
System.out.println(LocalDateTime.parse("Thu, 7 Dec 2017 07:40:40 ",
DateTimeFormatter.ofPattern("E, d MMM yyyy HH:mm:ss ", Locale.ENGLISH)));
这将打印预期的日期和时间:
2017-12-07T07:40:40
在格式模式字符串中,前面有两个空格,yyyy
之后有两个空格,在这个日期时间字符串中,每个地方只有一个空格。虽然SimpleDateFormat
对于解析它应该拒绝的字符串是臭名昭着的,但在这种情况下, 对象通过抛出你在问题标题中引用的消息ParseException
。 / p>
如果您将我的格式模式字符串与您的格式比较,您会注意到我只使用了一个d
,其中您使用了两个。 SimpleDateFormat
使用7
解析dd
,其中现代类更严格:d
匹配1或2位数的日期。其中dd
需要两位数。如果需要,您当然可以利用它进行更严格的验证。
如果至少使用Java 6 ,则可以。
要学习使用java.time
,请参阅this question: How to use ThreeTenABP in Android Project或在网上查找其他资源。
答案 1 :(得分:0)
它似乎也适用于空间......你得到什么例外?
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class SimpleDateFormatExample {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss ",Locale.ENGLISH);
String strDate= sdf.format(new Date());
System.out.println(strDate);
}
}
输出:星期五,2017年12月8日07:54:08