我在尝试解析时得到了上面的异常。我试过以下的日期格式,
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss ", Locale.ENGLISH);发布于 2017-12-08 07:55:29
作为well...what异常,您可以使用空间吗?
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
发布于 2017-12-08 11:41:45
java.time
SimpleDateFormat类不仅长期过时,而且也是出了名的麻烦。我建议您停止使用java.time,而是使用Java和time,也称为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 (您在问题标题中引用的消息)来实现对象。
如果您将我的格式模式字符串与您的格式字符串进行比较,您将注意到我只使用了一个d,其中使用了两个。在现代类更为严格的情况下,SimpleDateFormat将7与dd进行解析:d匹配1位或2位数字的月份日期。其中dd需要两位数。当然,如果需要的话,您可以利用它来进行更严格的验证。
问:我可以在Java版本中使用现代API吗?
如果至少使用Java 6,则可以。
有关学习如何使用java.time,请参阅Oracle教程或在网络上找到其他资源。
https://stackoverflow.com/questions/47709595
复制相似问题