Java 中Date類getTime()的方法返回從1970-1-1以來的毫秒數,這是下面函數運行的基礎。
package com.example.demo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.log4j.Logger; public class TimeTest { private static Logger log = Logger.getLogger(TimeTest.class); public static void main(String[] args) { String startTime="2019-10-26 15:27:00"; String endTime="2019-10-26 15:27:41"; log.info(startTime+"與"+endTime+"之間差"+getSecondsBetween(startTime,endTime)+"秒"); // 2019-9-31並不存在,這里證明SimpleDateFormat將字符串轉數字不是那么讓人放心 startTime="2019-9-31 00:00:00"; endTime="2019-10-01 00:00:00"; log.info(startTime+"與"+endTime+"之間差"+getSecondsBetween(startTime,endTime)+"秒"); // 2019-9-32也沒報異常更讓人擔憂了 startTime="2019-9-32 00:00:00"; endTime="2019-10-02 00:00:00"; log.info(startTime+"與"+endTime+"之間差"+getSecondsBetween(startTime,endTime)+"秒"); startTime="2019-9-30 15:27:00"; endTime="2019-10-26 15:27:41"; log.info(startTime+"與"+endTime+"之間差"+getDaysBetween(startTime,endTime)+"天"); startTime="2019-10-26 08:00:00"; endTime="2019-10-26 15:41:41"; log.info(startTime+"與"+endTime+"之間差"+getHoursBetween(startTime,endTime)+"小時"); } /** * 兩個時間之間差多少秒 * @param startTime * @param endTime * @return */ public static long getSecondsBetween(String startTime,String endTime) { SimpleDateFormat formatter =new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); long seconds = 0L; try { Date startDate = formatter.parse(startTime); long msStart = startDate.getTime(); Date endDate = formatter.parse(endTime); long msEnd = endDate.getTime(); seconds = ( msEnd-msStart ) / 1000 ; } catch (ParseException e) { e.printStackTrace(); } return seconds; } /** * 兩個時間之間差多少天 * @param startTime * @param endTime * @return */ public static long getDaysBetween(String startTime,String endTime) { SimpleDateFormat formatter =new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); long seconds = 0L; try { Date startDate = formatter.parse(startTime); long msStart = startDate.getTime(); Date endDate = formatter.parse(endTime); long msEnd = endDate.getTime(); seconds = ( msEnd-msStart ) / (1000*60*60*24) ; } catch (ParseException e) { e.printStackTrace(); } return seconds; } /** * 兩個時間之間差多少小時 * @param startTime * @param endTime * @return */ public static long getHoursBetween(String startTime,String endTime) { SimpleDateFormat formatter =new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); long seconds = 0L; try { Date startDate = formatter.parse(startTime); long msStart = startDate.getTime(); Date endDate = formatter.parse(endTime); long msEnd = endDate.getTime(); seconds = ( msEnd-msStart ) / (1000*60*60) ; } catch (ParseException e) { e.printStackTrace(); } return seconds; } }
輸出:
INFO [main] - 2019-10-26 15:27:00與2019-10-26 15:27:41之間差41秒 INFO [main] - 2019-9-31 00:00:00與2019-10-01 00:00:00之間差0秒 INFO [main] - 2019-9-32 00:00:00與2019-10-02 00:00:00之間差0秒 INFO [main] - 2019-9-30 15:27:00與2019-10-26 15:27:41之間差26天 INFO [main] - 2019-10-26 08:00:00與2019-10-26 15:41:41之間差7小時
--END-- 2019年10月26日15:45:14