我有以下日期:
String data = "20160421095058613000";
我想使用SimpleDateFormat检查这是否是有效日期。
我想要的模式是:"yyyymmddhhmmssSSS"
问题是我不知道如何在这个模式中包含日期结束时的3个零。
我试过了:
try {
Date date = new SimpleDateFormat("yyyymmddhhmmssSSS000").parse(data);
System.out.println(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但我明白了:
java.text.ParseException: Unparseable date: "20160421095058613000"
at java.text.DateFormat.parse(DateFormat.java:377)
at testare.main(testare.java:11)
答案 0 :(得分:3)
您可以将字符串子串到20160421095058613
和000
。然后检查第一个字符串是否有效(使用SimpleDateFormat),之后只检查最后3个字符是否为零。
答案 1 :(得分:0)
try {
String data = "20160421095058613000";
Date date = new SimpleDateFormat("yyyyMMddhhmmssSSS").parse(data.substring(0, 17));
System.out.println(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 2 :(得分:0)
据推测,最后的数字代表微秒。旧的旧日期时间类只能处理毫秒。
换句话说,最后六位数代表一秒的分数。
提示:如果您对此数据的来源有任何影响,请在将日期时间值序列化为文本时更改为使用标准ISO 8601格式。
您应该在java.time包中使用现代日期时间类。
java.time类使用的分辨率为纳秒,最多为九位小数的秒。你的六位数微秒就足够了。
有关格式化模式代码,请参阅DateTimeFormatter
类。与旧的SimpleDateFormat
代码非常相似,但不完全相同。
在输入时解析为LocalDateTime
缺少有关从UTC或时区偏移的任何信息。
如果从上下文中知道了预期的偏移量或区域,请应用它来生成OffsetDateTime
或ZonedDateTime
对象。
要与尚未更新为java.time类型的旧代码进行互操作,您可以通过在旧类上调用新方法进行转换。请注意,从java.time到旧类型可能意味着数据丢失,因为任何微秒或纳秒都被截断为毫秒。
所有这些问题已在其他问题和答案中多次涵盖。搜索Stack Overflow以获取更多信息和示例。