【无标题】SimpleDateFormat,以及date的.parse()方法

记第一次使用SimpleDateFormat时的场景------------------------------------------------

表rbw_geo_data:

 

业务场景:原本的时间轴接口是一个实现根据输入的id,(即date_type_id,对应的是数据类型)来获取数据,并且按时间的年、月、旬进行排序。现在要添加一个筛选功能,可以在原来的数据中筛选某一年某一月到另一年另一月的数据。

思路:这个接口中有两个功能,一个是根据Id获取数据,另一个是在第一个的基础上进一步筛选数据,所以会有两种返回结果,一种是前端传入的参数只有id时,返回第一种功能的数据,另一种是,传入的参数有id,有时间(年月)。参数的有无作为逻辑判断条件。

实现代码如下:

public Ret getLayerByDate(Integer id,String[] time) {

    if (id == null) {
        return Ret.fail("errorMsg", "请选择数据类型");
    }
    if (id != null && time == null) {

        List<Record> year_month_ten_day = Db.find("select * from rbw_geo_data where data_type_id = ? order by year,month,ten_day", id);

        return Ret.ok("data", year_month_ten_day);
    }else if (time != null) {
        SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date beginTime = sm.parse(time[0]+"-02");//这里的02是因为数据库有一些数据的开始时间是上一条数据的结束时间,01查出来数据会多出一条,只要避开01就ok
            Date endTime = sm.parse(time[1]+"-21");//因为前端传入的是年月,没有日,我们要得到的效果是传入7月到8月,返回这两个月的数据,所以拼上生效的日期,就能拿到一样效果的数据
            List<Record> year_month_ten_day_ym = Db.find("select * from (select * from rbw_geo_data where data_type_id = ? order by year,month,ten_day)a"+
                    " where begin_time <= ? and end_time >= ?",id,endTime,beginTime);

            return Ret.ok("data", year_month_ten_day_ym);
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

    return Ret.ok();
}

  1. 关于sql的思考:因为筛选功能是在第一个查询结果的基础上进行的,所以可以以第一个sql的查询结果作为临时表去查满足时间段内的数据。
  2. 关于sql判断条件的思考:怎么判断这条数据是否在这个时间段中,即,开始时间begin_time<=时间段的结束时间  and end_time >=时间段的开始时间,那么就可以查到这条数据。
  3. SimpleDateFormat的用法:

(1)SimpleDateFormat是一个与语言环境相关的格式化日期和分析日期的工具类,利用该类可以将日期转换成文本,或者将文本转换成日期。

在使用SimpleDateFormat时需要指定一个你需要的格式(pattern)来格式日期Date.

  1. SimpleDateFormat中parse()方法小结:

parse()方法的作用时将文本转换为日期Date,parse()方法的输入参数是一个文本,比如String,例如:

private void test2() {

  try {

        String day = "2008年08月18日 20:07:33";

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());

        Date date = simpleDateFormat.parse(day);

        System.out.println("----> 格式化后的日期为: "+date);

    } catch (Exception e) {

        System.out.println("----> Exception: "+e.toString());

    }

}

  1. 关于时间格式的实战及思考:

我刚开始设置的格式是yyyy-MM,前端传入的参数也是年月,发现返回的数据是不符合要求的,然后再设置成yyyy-MM-dd,刚开始传入年月,运行报错传入的参数不认识,进一步在navicat中测试sql语句,年月日查询出来是正确的数据,因此我们只需要在前端传入的年月,拼上能查询出正确结果的日期进行查询即可。

综合考虑:需要注意的是sql需要结合实际数据进行编写,多测数据,保证写的sql适用所有数据。

附:关于SimpleDateFormat的详细用法参考下列文献:

参考文献:SimpleDateFormat 的使用及其 注意事项_怪咖先森的博客-CSDN博客_simpledateformat用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值