【Java日期时间】使用SimpleDateFormat对日期做加法

日期做加法-Calendar

扩展:日历类Calendar处理日期的加加减减。

日期做加法-SimpleDateFormat

记住一个类SimpleDateFormat :

参数是指定的日期格式,只要是日期格式都可以。
如 mm:ss、HH:mm:ss、dd HH:mm:ss

SimpleDateFormat sdfHms=new SimpleDateFormat("HH:mm:ss");

记住SimpleDateFormat 类的一个方法:

日期字符串转日期如:分:秒 格式的日期。

Date data3 = sdf.parse("00:00");

记住日期类的一个方法:

data1.getTime()得到的是毫秒,是记录Java规定的1970年1月1日开始的,这个毫秒值就是你的日期和1970年1月1日0时0分0秒的差转为毫秒。

       Date data1 = sdf.parse("12:20");
        Date data3 = sdf.parse("00:00");
      //毫秒除以1000得秒,秒除以60得分钟,模60得剩余的秒。
        System.out.println(((data1.getTime() ) / (60 * 1000)) % 60 + "秒");
        System.out.println(((data3.getTime() ) / (60 * 1000)) % 60 + "秒");
        long l1 = data1.getTime() - data3.getTime(); //毫秒



日期相加

最终计算出来的日期相加:

  Date data1 = sdf.parse("12:20");
        Date data3 = sdf.parse("00:00");
      //毫秒除以1000得秒,秒除以60得分钟,模60得剩余的秒。
        System.out.println(((data1.getTime() ) / (60 * 1000)) % 60 + "秒");
        //结果是0
        System.out.println(((data3.getTime() ) / (60 * 1000)) % 60 + "秒");
        // data3.getTime() = 0
        long l1 = data1.getTime(); //毫秒
        Date data2 = sdf.parse("10:40");
        Date date = new Date(data2.getTime() + l1);
        System.out.println(sdf.format(date ));

注意:

Map<String,Object> map = new HashMap<>();
List<AudioEpisode> episodeList = resourceDao.selectEpisodeByAudioId(audioId);
SimpleDateFormat sdfHms=new SimpleDateFormat("HH:mm:ss");
Date startDate = sdfHms.parse("00:00:00");


long mselSum = 0;
for (int i = 0; i<episodeList.size();i++){


    Date date = sdfHms.parse(episodeList.get(i).getEpisodeTotalDuration().trim());
    long value = date.getTime() - startDate.getTime();
    mselSum = value + mselSum;
    System.out.println(sdfHms.format(mselSum ));
};
Date date = new Date(mselSum);
System.out.println(sdfHms.format(date ));
map.put("episodeListSize",episodeList.size());
map.put("episodeList",episodeList);
return map

episodeList 的两条数据:
00:24:53
00:24:53
输出结果:
08:24:53
08:49:46
问题:
多个8小时。
在取日期以前设置一下时区(日期格式化前加上下面的代码段)

完善:

以上的方式是各自计算getTime毫秒求总和,然后拿着毫秒总和当作Date类构造函数的参数,这样会因为时区问题导致最终数据的不准确,以下是正确的方式:

public Map<String, Object> selectEpisodeByAudioId(String audioId) throws ParseException {
        Map<String,Object> map = new HashMap<>();
        List<AudioEpisode> episodeList = resourceDao.selectEpisodeByAudioId(audioId);
        SimpleDateFormat sdfHms=new SimpleDateFormat("HH:mm:ss");
     
        Date dateSum = sdfHms.parse(episodeList.get(0).getEpisodeTotalDuration().trim());
        for (int i = 1; i<episodeList.size();i++){


            Date date = sdfHms.parse(episodeList.get(i).getEpisodeTotalDuration().trim());
            long value = date.getTime();
            dateSum= new Date(value + dateSum.getTime());
        };
        System.out.println(sdfHms.format(dateSum));
        map.put("episodeListSize",episodeList.size());
        map.put("episodeList",episodeList);
        return map;

episodeList 的两条数据:
00:24:53
00:24:53
输出结果:
00:49:46

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@来杯咖啡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值