1.出現背景
這個需求的出現是在項目開發過程中,進行活動時間設置。需要把活動開始當天的第一秒和活動結束當天是最後一秒,作爲一個完整的活動時間。而當時前端傳輸過來的日期格式是 年-月-日(可選擇),時分秒默認當時創建的時間。這是就需要對時分秒進行格式轉換。
2.解決方案
2.1 SimpleDateFormat方案
這是一般對日期進行格式化的方法,可以自定義日期格式,但確實比較low,轉換也比較麻煩,但可以滿足需要。
public static void main(String[] args) throws ParseException {
Date date = new Date();
tranformTime(date);
}
private static void tranformTime(Date date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("原始時間:"+date);
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd 00:00:01");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
String startTimeStr = sdf1.format(date);
String endTimeStr = sdf2.format(date);
Date startTime = sdf.parse(startTimeStr);
Date EndTime = sdf.parse(endTimeStr);
System.out.println("開始時間:"+startTime);
System.out.println("結束時間:"+EndTime);
}
2.2 Calendar方式
Calendar類是一個抽象類,可以爲在某一特定時刻和一組之間的轉換的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用於操縱該日曆字段,如獲取的日期下個星期。 時間上的瞬間可以用毫秒值表示,該值是從1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。 該類還提供了用於在包外部實現具體日曆系統的其他字段和方法。 這些字段和方法定義爲protected 。 (來自API)
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println("原始時間:"+date);
System.out.println("開始時間:"+getDateMin(date));
System.out.println("結束時間:"+getDateMaxDB(date));
}
public static Date getDateMin(Date date) {
if(date==null) {
return date;
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 1);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
/**
* 獲取某天的最大時間
* @param date
* @return
*/
public static Date getDateMaxDB(Date date) {
if(date==null) {
return date;
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
注意:當需要把處理好的日期插入到數據庫時,需要把c.set(Calendar.MILLISECOND, 0);毫秒值設置爲0或500以下,因爲mysql在進行處理的時候會把大於500毫秒的數據自動加1。