【问题标题】:parsing timestamp using simpledateformat使用 simpledateformat 解析时间戳
【发布时间】:2020-06-08 13:14:25
【问题描述】:

我正在尝试使用SimpleDateFormat 解析日期(可以是任何格式)。为此,我准备了使用SimpleDateFormat 中可用符号的格式列表,并尝试使用以下代码解析日期字符串:

private Pair<Date,SimpleDateFormat> parseTimeStamp(String input)
    {
        Pair<Date,SimpleDateFormat> dateTime=null;
        for (SimpleDateFormat dateFormat : TIMESTAMP_FORMATS) {
            try {
                Date temp = dateFormat.parse(input);
                dateTime=new Pair<Date, SimpleDateFormat>(temp,dateFormat);
                break;
            } catch (ParseException e) {
            }
        }
    return dateTime;
    }

private static final List<SimpleDateFormat> TIMESTAMP_FORMATS = new ArrayList<SimpleDateFormat>() {{
    add(new SimpleDateFormat("yyyyMMddhh:mm:ssa"));
    add(new SimpleDateFormat("yyyyMMddhh:mma"));
    add(new SimpleDateFormat("yyyyMMddhha"));
    add(new SimpleDateFormat("yyyyMMddHH:mm:ss"));
    add(new SimpleDateFormat("yyyyMMddHH:mm"));
    add(new SimpleDateFormat("yyyyMMddHH"));
    add(new SimpleDateFormat("yyyyMMddhhmmssa"));
    add(new SimpleDateFormat("yyyyMMddhhmma"));
    add(new SimpleDateFormat("yyyyMMddHHmmss"));
    add(new SimpleDateFormat("yyyyMMddHHmm"));
    add(new SimpleDateFormat("yyyyMMddZ"));
    add(new SimpleDateFormat("yyyyMMddz"));
    add(new SimpleDateFormat("yyyyMMddX"));

    add(new SimpleDateFormat("dd-MM-yyyyhh:mm:ssa"));
    add(new SimpleDateFormat("dd-MM-yyyyhh:mma"));
    add(new SimpleDateFormat("dd-MM-yyyyhha"));
    add(new SimpleDateFormat("dd-MM-yyyyHH:mm:ss"));
    add(new SimpleDateFormat("dd-MM-yyyyHH:mm"));
    add(new SimpleDateFormat("dd-MM-yyyyHH"));
    add(new SimpleDateFormat("dd-MM-yyyyhhmmssa"));
    add(new SimpleDateFormat("dd-MM-yyyyhhmma"));
    add(new SimpleDateFormat("dd-MM-yyyyHHmmss"));
    .
    .
    .
    .
    .
    .
   }
}

当我解析 06-06-2020 1:08:00PM 时,返回的格式是 yyyyMMddHH 而不是 dd-MM-yyyyy hhmmssa
我想问一下为什么会出现这种差异以及如何解决这个问题?

【问题讨论】:

  • 您的第一个大错误是不应该使用DateSimpleDateFormat。它们已被弃用。您应该使用LocalDateTimeDateTimeFormatter。在您过渡到这些课程之前,您学到的有关此特定帖子的任何内容都将是有问题的。

标签: java date timestamp compare simpledateformat


【解决方案1】:

您需要为您的 SimpleDateFormats 设置Lenient(false)。

    private static final List<SimpleDateFormat> TIMESTAMP_FORMATS = new ArrayList<SimpleDateFormat>() {
        {
            add(createDf("yyyyMMddhh:mm:ssa"));
            // ....
        }
    };

    private static SimpleDateFormat createDf(String s) {
        SimpleDateFormat sdf = new SimpleDateFormat(s);
        sdf.setLenient(false);
        return sdf;
    }

【讨论】:

  • 即使使用链表 06-06-2020 1:08:00PM 被解析为 yyyy-MM-ddHHmm 而预期结果是 dd-MM-YYYY hh:mm:ssa
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 2016-04-19
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多