【问题标题】:Parse a date in java using SimpleDateFormat with additional characters使用带有附加字符的 SimpleDateFormat 解析 java 中的日期
【发布时间】:2016-08-30 11:05:41
【问题描述】:

我有以下日期:

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)

【问题讨论】:

  • 前几天有一个问题(找不到了)显示,SimpleDateFormat 无法在模式中处理文字 '000'。所以你需要删除它。
  • 请注意,您的格式字符串是错误的:几个月使用MM 而不是mm(因为mm 表示分钟),如果需要解析,使用HH 而不是hh 24 小时而不是 12 小时小时值。
  • @Tom 你能给我这个问题的链接吗?
  • @AlexChihaia “(再也找不到了)” ;P.

标签: java simpledateformat date-parsing


【解决方案1】:

您可以将字符串子串成20160421095058613000。然后检查第一个字符串是否有效(使用 SimpleDateFormat),然后检查最后 3 个字符是否为零。

【讨论】:

    【解决方案2】:
    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();
                }
    

    【讨论】:

      【解决方案3】:

      微秒

      大概那些最后的数字代表微秒。旧的旧日期时间类只能处理毫秒。

      换句话说,最后六位数字代表一秒的小数。

      提示:如果您对此数据的来源有任何影响,请在将日期时间值序列化为文本时更改为使用标准 ISO 8601 格式。

      java.time

      您应该使用 java.time 包中的现代日期时间类。

      java.time 类使用纳秒的分辨率,最多可显示九位十进制小数。对你的六位数微秒来说绰绰有余。

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 2016-11-19
        相关资源
        最近更新 更多