java localdate日期格式处理

引言

作为一种业务场景,我们经常会从前端取到日期数据,针对前端回传的数据再到数据库进行取值。那么针对前端传回来的日期数据可能有几种情况,我们也要做对应的处理。

日期的表现形式有很多种,在java里我们可以把类似于20180630 这一种看成是一种int的,也可以看成是string类型的,具体则要看我们的业务需求,如果是数据传过来不用进行例如日期变化之类的处理我建议存int 类型。如果是要对日期进行处理的我建议还是存string 类型。

除了上面说的20180630 类型,我们实际上还会碰到类似于201806 这种类型。这种只有年月因为它对日是没有要求的所以我有两种思路:1.对其进行拼接组装成类似于20180601 这样的格式再进行处理。2.建立新的实体类DateEntity,包含3个字段分别代表年月日,通过getter/setter方法对字段赋值。

除了上面说的类型实际上还可能会有2018-06-30 或者是2018/06/30 这些常见的格式。从前端传来这些格式一定是string 类型进行处理。

还有一种是时间戳格式long 类型。

本文不使用弃用的Date 相关日期类进行处理,而是使用java8的LocalDate 对时间进行处理。所以针对大部分的传参都会转换成LocalDate 相关的类库进行处理。

年月日/年月处理

这里先解决传入年月日和年月两种格式的处理问题。假设传的是int类型。
方案一:

    /**
     * date : 20180105
     */
    public static LocalDate convertWithDay(int date){
        return LocalDate.parse(String.valueOf(date),DateTimeFormatter.BASIC_ISO_DATE);
    }

    /**
     * date : 201801
     */
    public static LocalDate convertWithoutDay(int date){
        return LocalDate.parse(new StringBuilder().append(String.valueOf(date)).append("01").toString(),DateTimeFormatter.BASIC_ISO_DATE);
    }

方案二:

    public class DateEntity {
        private int year;
        private int month;
        private int day;
        //省略getter/setter方法;  
    }
    /**
     * date : 20180105
     */
    public static DateEntity convertWithDay(int date){
        DateEntity dateEntity = new DateEntity();
        int year = date/10000; // 2018
        int month = (date - year*10000)/100; // 01
        int day = date - year*10000 - month*100;
        dateEntity.setYear(year);
        dateEntity.setMonth(month);
        dateEntity.setDay(day);
        return dateEntity;
    }

    /**
     * date : 201801
     */
    public static DateEntity convertWithoutDay(int date){
        DateEntity dateEntity = new DateEntity();
        int year = date/100; // 2018
        int month = date - year*100; // 01
        dateEntity.setYear(year);
        dateEntity.setMonth(month);
        return dateEntity;
    }

对于方案1的缺点在于引入的这个01不太合理,目的只是为了凑成那种格式。但是优点也显而易见,代码简单,而且返回的LocalDate 非常便于二次运算。

对于方案2的优点在于它比较合理,如果没有传日就不设置日的字段这种处理比较推荐。但是缺点就是太麻烦了(上面的优点就是它的缺点)。

猜你喜欢

转载自blog.csdn.net/saywhat_sayhello/article/details/80868610
今日推荐