使用simpledateformat解析时间戳

问题描述 投票:0回答:1

我正在尝试使用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:00 PM时,返回的格式为yyyyMMddHH而不是dd-MM-yyyyy hhmmssa。我想问为什么这个差异以及如何解决这个问题?

java date timestamp compare simpledateformat
1个回答
0
投票

由于ArrayList的排序性质>

将所有元素添加到ArrayList时,它将首先存储以dd开始,并以yy结尾。因此,您会看到格式yyyyMMddHH,因为它是排序中的最后一个。

您可以使用LinkedList来保持插入顺序。


0
投票

您需要为SimpleDateFormats设置setLenient(false)。

© www.soinside.com 2019 - 2024. All rights reserved.