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 "";
}
}
}