日期做加法-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