MySql计算时间间隔的方法(不能直接用减号)
一、问题描述
MySql表中有2个字段:
start_time,类型是timestamp
end_time,类型是timestamp
现在想用sql语句计算时间间隔,用end_time-start_time,结果算出来的数字有问题,并不是时间间隔:
//这句sql是错的select (end_time - start_time) as during_time from myTable limit 1;
二、解决方法
sql计算时间间隔,不能直接用减号,需要用方法timediff(),样例如下:
//这句sql是对的select timediff(end_time , start_time) as during_time from myTable limit 1;
三、后续Java代码
上方sql执行后,返回到Java的结果是java.sql.Time类型的;
下面是把java.sql.Time转为x时x分x秒(String,假设1天以内) 的方法:
import java.sql.Time;import java.time.LocalTime;import java.util.*;public class MyUtil {//timediff()计算完后,得到Time类型的对象,假设为1天以内public static String transHmsDate(Object o){try{//先转为Time类型,再转为LocalTime类型LocalTime localTime = ((Time) o).toLocalTime();StringBuffer sb = new StringBuffer();int hour = localTime.getHour();int minute = localTime.getMinute();int second = localTime.getSecond();if( hour > 0 ){sb.append(hour).append("时");sb.append(minute).append("分");sb.append(second).append("秒");}else if( minute > 0 ){sb.append(minute).append("分");sb.append(second).append("秒");}else {sb.append(second).append("秒");}return sb.toString();}catch(Exception e){return "";}}}
