关于取每天的00:00:01和23:59:59 的一般处理策略

1.出现背景

这个需求的出现是在项目开发过程中,进行活动时间设置。需要把活动开始当天的第一秒和活动结束当天是最后一秒,作为一个完整的活动时间。而当时前端传输过来的日期格式是 年-月-日(可选择),时分秒默认当时创建的时间。这是就需要对时分秒进行格式转换。

2.解决方案

2.1 SimpleDateFormat方案

这是一般对日期进行格式化的方法,可以自定义日期格式,但确实比较low,转换也比较麻烦,但可以满足需要。

 public static void main(String[] args) throws ParseException {
        Date date = new Date();
        tranformTime(date);
    }

    private static void tranformTime(Date date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("原始时间:"+date);
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd 00:00:01");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
        String startTimeStr = sdf1.format(date);
        String endTimeStr = sdf2.format(date);

        Date startTime = sdf.parse(startTimeStr);
        Date EndTime = sdf.parse(endTimeStr);
        System.out.println("开始时间:"+startTime);
        System.out.println("结束时间:"+EndTime);

    }

在这里插入图片描述

2.2 Calendar方式

Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。 该类还提供了用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为protected 。 (来自API)

public static void main(String[] args) throws ParseException {
        Date date = new Date();
        System.out.println("原始时间:"+date);
        System.out.println("开始时间:"+getDateMin(date));
        System.out.println("结束时间:"+getDateMaxDB(date));

    }

    public static Date getDateMin(Date date) {
        if(date==null) {
            return date;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 1);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }
    /**
     * 获取某天的最大时间
     * @param date
     * @return
     */
    public static Date getDateMaxDB(Date date) {
        if(date==null) {
            return date;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }

在这里插入图片描述
注意:当需要把处理好的日期插入到数据库时,需要把c.set(Calendar.MILLISECOND, 0);毫秒值设置为0或500以下,因为mysql在进行处理的时候会把大于500毫秒的数据自动加1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值