LocalDateTime多种格式同一转换处理

3 篇文章 0 订阅

LocalDateTime多种格式同一转换处理

场景:在程序中有可能会接收到不同的String类型的时间,需要统一转换为LocalDataTime格式

思路:先使用正则表达式,将除数字以外的符号统一替换为相同符号,之后按照符号进行分割,分割之后,按照年、月、日 三个一组划分为一个LocalDataTime时间

private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");

    @Test
    public void testTimeFormat() {
    	//模拟需要处理的多种格式
        List<String> timeFormatList = Arrays.asList(
                "2020-01-15-122020-01-17",
                "2020/1/3",
                "2020-01-09/2020-01-11",
                "2020年1月24日",
                "2020年1月24日-2020年1月27日",
                "2020.1.24",
                "2020.1.24-2020.1.26"
        );
        try {
            for (String s : timeFormatList) {
                List<LocalDateTime> list = timeTransform(s);
                for (LocalDateTime dateTime : list) {
                    System.out.println(dateTime);
                }
                System.out.println("=====");
            }
        } catch (DateTimeParseException e) {
            System.out.println("时间转换错误" + e);
        }
    }

	//传入String类型时间数据,根据具体业务需求输出两个LocalDateTime,存放在List集合中
    public static List<LocalDateTime> timeTransform(Object s) {
        List<LocalDateTime> list = new ArrayList<>();
        if (s instanceof LocalDateTime) {
            list.add((LocalDateTime) s);
            list.add((LocalDateTime) s);
            return list;
        }
        //使用正则表达式,将非数字所有符号替换为"-",并替换掉可能出现"--"的情况
        String time = ((String) s).trim().replaceAll("\\D", "-").replace("--", "-");
        String[] split = time.split("-");
        //分割之后,按照年、月、日 三个一组划分为一个LocalDataTime时间
        for (int i = 0; i < (split.length - 1) / 2; i++) {
            String yyyy = split[i * 3];
            String MM = split[1 + (i * 3)].length() == 2 ? split[1 + (i * 3)] : "0" + split[1 + (i * 3)];
            String dd = split[2 + (i * 3)].length() == 2 ? split[2 + (i * 3)] : "0" + split[2 + (i * 3)];
            LocalDateTime dateTime = LocalDate.parse(yyyy + MM + dd, formatter).atStartOfDay();
            list.add(dateTime);
        }
        if (list.size() == 1) {
            list.add(list.get(0));
        }

        return list;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值