java 時間相關的類互相轉換

今天在讀取solr中的時間時,發現又是一堆時間格式轉來轉去,現在總結下之前工程中都遇到的關於時間的轉換,這裏主要是以java的類做總結:

一. Timestamp 與 Date( java.util.Date )互轉

Date是Timestamp的父類!

1.1 Timestamp ->Date :

// date對象指向的實體是一個timestamp,這是父類引用指向子類對象。
public Date TimestampToDate(Timestamp timestamp) {
    Date date = new Date();
    try {
        date = timestamp;
        return date;
    }catch(Exception e) {
        e.printStackTrace();
    }
}

1.2 Date -> Timestamp :

//父類不能直接向子類轉化,其實很簡單;
Timestamp timestamp = new Timestamp(date.getTime());

二. Timestamp 與 String互轉

2.1 Timestamp -> String:

一種是以直接timestamp.toString();
或者利用DateFormat;

public String timestampToString(Timestamp timestamp) { 
    String tsStr = “”;  
    DateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”);  
    try { 
        //方法一  
        tsStr = timestamp.toString();
        //方法二  
        tsStr = sdf.format(timestamp);
        return tsStr;   
    } catch (Exception e) {  
        e.printStackTrace();  
        return tsStr;
    } 
}

2.2 String-> Timestamp:

Timestamp timestamp = Timestamp.valueOf(tsStr);  

注:String的類型必須形如: yyyy-mm-dd hh:mm:ss[.f…] 格式。

三. Date( java.util.Date )與 String 互轉

3.1 Date -> String:

 public String dateToString(Date date, String format) {
    //format: “yyyy/MM/dd HH:mm:ss”
    String dateStr="";
    DateFormat sdf = new SimpleDateFormat(format); 
    try {  
        dateStr = sdf.format(date); 
        return dateStr;
    } catch (Exception e) {  
        e.printStackTrace();  
        return null;
    }  
}

3.2 String->Date:

public Date stringToDate(String dateStr,String format) {
  Date date = new Date();  
  //注意format的格式要與日期String的格式相匹配  
  //format1: Locale.US
  //format: “yyyy/MM/dd HH:mm:ss”
  //DateFormat sdf1 = new SimpleDateFormat(format1,Locale.US); 
  DateFormat sdf = new SimpleDateFormat(format); 

  try {  
      date = sdf.parse(dateStr);  
      return date;  
  } catch (Exception e) {  
      e.printStackTrace(); 
      return null; 
  }  
}

四. Calendar相關功能模塊

4.1 DateUtil有關calendar的一部分:

/**
         * 獲取某一個月的第一天
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getFirstDayOfMonth(Calendar calendar) {

            calendar.set(Calendar.DATE, 1);        // 設置當前月第一天
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);


            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 獲取某一的開始時間
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getFirstTimeOfDay(Calendar calendar) {


            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);


            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 獲取某一天的最後時間
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getLastTimeOfDay(Calendar calendar) {


            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);          


            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 獲取某一個月的最後一天
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getLastDayOfMonth(Calendar calendar) {

            calendar.set(Calendar.DATE, 1);        // 設置當前月的1號

            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);

            calendar.add(Calendar.MONTH, 1);    // 加一個月,變爲下月的1號
            calendar.add(Calendar.DATE, -1);    // 減一天,變爲當前月的最後一天

            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 計算兩個日期之間相差的天數
         * @param costTime
         * @param receivableTime
         * @return
         */
        public static int getDays(Date end,Date start){
            Calendar aCalendar = Calendar.getInstance();
            Calendar bCalendar = Calendar.getInstance();
            aCalendar.setTime(end);
            bCalendar.setTime(start);
            int days = 0;
            while(aCalendar.before(bCalendar)){
                days++;
                aCalendar.add(Calendar.DAY_OF_YEAR, 1);
            }

            if(days==0){
                aCalendar.setTime(start);
                bCalendar.setTime(end);
                while(aCalendar.before(bCalendar)){
                    days++;
                    aCalendar.add(Calendar.DAY_OF_YEAR, 1);
                }
            }
            return days;
        }

        /**
         * 計算兩個月份之間相差的月份數
         * @param costTime
         * @param receivableTime
         * @return
         */
        public static int getMonths(Date end,Date start){
            Calendar aCalendar = Calendar.getInstance();
            Calendar bCalendar = Calendar.getInstance();
            aCalendar.setTime(end);
            bCalendar.setTime(start);
            int months = 0;
            while(aCalendar.before(bCalendar)){
                months++;
                aCalendar.add(Calendar.MONTH, 1);
            }

            if(months==0){
                aCalendar.setTime(start);
                bCalendar.setTime(end);
                while(aCalendar.before(bCalendar)){
                    months++;
                    aCalendar.add(Calendar.MONTH, 1);
                }
            }
            return months;
        }

        /**
         * 獲取某一個月的最後一天
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getLastMonthTime(Calendar calendar) {



            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

            calendar.add(Calendar.MONTH, -1);    // 減一個月,變爲上個月的開始


            return new Timestamp(calendar.getTimeInMillis());
        }

4.2 每天固定一個時間點起程序:

除了以下的代碼,當然也可以裏spring配置文件實現,更簡單。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7); // 早上7點
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime();
// 第一次執行定時任務的時間
// 如果第一次執行定時任務的時間 小於當前的時間
// 此時要在 第一次執行定時任務的時間加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
if (date.before(new Date())) {
    Calendar startDT = Calendar.getInstance();
    startDT.setTime(date);
    startDT.add(Calendar.DAY_OF_MONTH, 1);
    date = startDT.getTime();
}

Timer timer = new Timer();
TaskMain task = new TaskMain();//TaskMain是我的任務線程
// 安排指定的任務在指定的時間開始進行重複的固定延遲執行。
timer.schedule(task, date, PERIOD_DAY);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章