使用带有其他字符

时间:2016-08-30 11:05:42

标签: java simpledateformat date-parsing

我有以下日期:

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)

3 个答案:

答案 0 :(得分:3)

您可以将字符串子串到20160421095058613000。然后检查第一个字符串是否有效(使用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包中使用现代日期时间类。

java.time类使用的分辨率为纳秒,最多为九位小数的秒。你的六位数微秒就足够了。

有关格式化模式代码,请参阅DateTimeFormatter类。与旧的SimpleDateFormat代码非常相似,但不完全相同。

在输入时解析为LocalDateTime缺少有关从UTC或时区偏移的任何信息。

如果从上下文中知道了预期的偏移量或区域,请应用它来生成OffsetDateTimeZonedDateTime对象。

要与尚未更新为java.time类型的旧代码进行互操作,您可以通过在旧类上调用新方法进行转换。请注意,从java.time到旧类型可能意味着数据丢失,因为任何微秒或纳秒都被截断为毫秒。

所有这些问题已在其他问题和答案中多次涵盖。搜索Stack Overflow以获取更多信息和示例。