vlambda博客
学习文章列表

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