做javaWEB項目時,對於時間的處理上總會出現一些非常細緻的問題,這裏總結一下,方便以後查詢。
一、 有時候前端顯示頁不是日期區間,而是就一個日期,也就是查當天的日期,比方說,就查2019-05-22這一天的數據量,這裏轉換到後端的意思即爲查2019-05-22 00:00:00到2019-05-22 23:59:59這個日期區間的數據記錄,這時候就需要轉換一下:
package com.Jevin.controller;
import org.junit.Test;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
/**
* 獲取日期的00:00:00
* @param startDate
* @return
*/
public static Date getStartTime(Date startDate){
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
return calendar.getTime();
}
/**
* 獲取日期的23:59:59
* @param endDate
* @return
*/
public static Date getEndTime(Date endDate){
Calendar calendar = Calendar.getInstance();
calendar.setTime(endDate);
calendar.set(Calendar.HOUR_OF_DAY,23);
calendar.set(Calendar.MINUTE,59);
calendar.set(Calendar.SECOND,59);
return calendar.getTime();
}
@Test
public void test(){
System.out.println(getEndTime(new Date()));
}
}
二、將Date類型的時間轉換爲任意格式的String類型的時間,或者將String類型的時間格式轉換爲Date類型:
/**
* 將Date類型轉換爲指定格式的String
*/
@Test
public void test13(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String strDate = sdf.format(date);
System.out.println(strDate);
}
/**
* 將String類型的時間轉換爲Date類型
*/
@Test
public void test14() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = "1949-10-01 12:12:12";
Date date = sdf.parse(strDate);
System.out.println(date);
}
三、獲得時間戳,也就是從1970年到現在的時間的毫秒數,反過來由時間戳獲取時間。這個前後端分離用的比較多,一般前後端傳的時間參數都是時間戳,而不是具體時間,這個時候需要我們將其解析爲時間格式:
/**
* 將具體時間轉換爲時間戳
*/
@Test
public void test15(){
Date date = new Date();
long timeMillis = date.getTime();
System.out.println(timeMillis);
}
/**
* 將時間戳轉換爲具體時間
*/
@Test
public void test16(){
String strMillis = "1558503981957";
long time = Long.valueOf(strMillis);
Date date = new Date(time);
System.out.println(date);
}
三、數據庫日期函數TIMESTAMPDIFF()可用來計算兩個日期之間的差值:比方說,我需要計算2020-05-12比2019-05-01多了多少天,可以這樣:
SELECT TIMESTAMPDIFF(MONTH,"2019-05-01","2020-05-12");
或者當前時間比指定日期多幾天
SELECT TIMESTAMPDIFF(DAY,"2019-05-01",NOW());