Java的時間處理與Mysql的時間查詢

      身爲一名程序員,少不了要對時間、日期作一些比較、轉換等等的處理,和根據必定的時間條件對數據庫進行查詢操做,每次遇到這樣的問題的時候大部分都會去百度而後找一些符合需求的文章進來張貼複製使用,固然有一些用的多了也就本身記着了,可是以爲仍是有必要總結一下。程序員

       0 0多是太基礎了吧,BOSS知道我最近在寫技術文章,問了問內容,他讓我之後寫一些提升點的,別老寫基礎,無論先把這個總結了。sql

1、Java時間的轉換、比較與日曆的應用

Date的基本使用

//獲取Date
Date date = new Date();
//也能夠從Calendar中獲取Date
Calendar calendar = Calendar.getIntance();
Date date = calendar.getTime();

//獲取時間戳(當前時間) 1534143874090
//方式一
System.out.println(date.getTime());
//方式二 如今系統通常都推薦用這種方式
System.out.println(System.currentTimeMillis());


//格式化時間
SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//Date類自帶的格式化
DateFormat dateTime = DateFormat.getDateTimeInstance();
DateFormat date = DateFormat.getDateInstance();

//將時間轉爲格式化字符串
//2018-08-13 11:44:25
System.out.println(timeFormat.format(new Date()));
System.out.println(dateTime.format(new Date()));
//2018-08-13
System.out.println(date.format(new Date()));
System.out.println(dateFormat.format(new Date()));、

//將格式化字符串轉爲時間
//Mon Aug 13 11:44:25 CST 2018 必須用完整的時間格式
System.out.println(timeFormat.parse("2018-08-13 11:44:25"))

複製代碼

Calender的基本使用

      上面是時間格式的一些轉換,比較簡單,但真正煩人的是每每並非用如今的這個時間,須要去時間進行調整計算,就得用到日曆了,設置成指定時間,日期加減、比較等等。數據庫

//能夠獲取當前的日曆
Calendar calendar = Calendar.getInstance();
//也能夠經過DateFormat獲取日曆
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = dateFormat.getCalendar();
//直接給日曆設置指定時間
calendar.setTime(new Date());

//1年後
calendar.add(Calendar.YEAR, 1);
//1年前
calendar.add(Calendar.YEAR,  -1);
//一樣的能夠替換成Calendar.MONTH,Calendar.DAY_OF_YEAR,Calendar.HOUR等等單位進行替換從而加減
複製代碼

Date與Calender的應用

1 最常常的就是計算兩個日期中間差了多少天,很少說,來看代碼。學習

public static int getDayDiffer(int beginDay, int endDay) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    Date beginDate = sdf.parse(String.valueOf(beginDay));
    Date endDate = sdf.parse(String.valueOf(endDay));
    Calendar cal1 = Calendar.getInstance();
    cal1.setTime(beginDate);
            
    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(endDate);
    int day1 = cal1.get(Calendar.DAY_OF_YEAR);
    int day2 = cal2.get(Calendar.DAY_OF_YEAR);
            
    int year1 = cal1.get(Calendar.YEAR);
    int year2 = cal2.get(Calendar.YEAR);
    if (year1 != year2)   //不一年
    {
        int timeDistance = 0;
        for (int i = year1; i < year2; i++) {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //閏年
            {
                timeDistance += 366;
            } else    //不是閏年
            {
                timeDistance += 365;
            }
        }
                
        return timeDistance + (day2 - day1);
    } else {  //同年
    
        return day2 - day1;
    }
            
}
複製代碼

2 這是我當時經過傳一個指定日子,須要拿他後面一年的全部日期的格式化時間。spa

public static JSONArray getFormatTimeAllYear(String yyyyMMdd) {
    List<String> result = new ArrayList();
    result.add(yyyyMMdd);
    //+10000等於年的個位數+1
    int endYear = Integer.parseInt(yyyyMMdd)+10000;
    //若是是當前年就將最後一天設置成當天
    if(String.valueOf(yyyyMMdd).startsWith(String.valueOf(calendar.get(Calendar.YEAR)))) {
    //getCurrentyyyMMdd()獲取天前格式化日期
    endYear = getCurrentyyyyMMdd();
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    Date beginDate = new Date();
    Date endDate = new Date();
    try {
        beginDate = sdf.parse(String.valueOf(yyyyMMdd));
        endDate = sdf.parse(String.valueOf(endYear));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar begin = Calendar.getInstance();
    begin.setTime(beginDate);
        
    //用after方法來判斷是否在某日期以後,同有before來判斷以前
    while (endDate.after(begin.getTime()))  {
        // 根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量
        begin.add(Calendar.DAY_OF_MONTH, 1);
        result.add(Integer.valueOf(sdf.format(begin.getTime())));
    }
    result.remove(result.get(result.size()-1));
    return result;
}
       
       
       
public static int getCurrentyyyyMMdd() {
    Calendar calenda = Calendar.getInstance();
    String year = String.valueOf(calenda.get(Calendar.YEAR));
    String mounth = String.valueOf(calenda.get(Calendar.MONTH) + 1);
    String day = String.valueOf(calenda.get(Calendar.DAY_OF_MONTH));
    if (mounth.length() == 1) {
        mounth = "0" + mounth;
    }
    if (day.length() == 1) {
        day = "0" + day;
    }
    return Integer.valueOf(year + mounth + day);
}
複製代碼

3 還有就是常常須要計算某天是周幾一類的操做。code

//計算某一天是周幾
   public static int getDayOfWeek(String yyyyMMdd) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date beginDate = new Date();
        try {
            beginDate = sdf.parse(yyyyMMdd);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(beginDate);
        //國外的第一天是從週一開始算的
        int day = cal.get(Calendar.DAY_OF_WEEK)-1;
        if(day == 0) {
            day = 7;
        }
        return day;
    }
    
    
    
    //計算某一週是一年中的第幾周
    public static String getWeekOfYear(String yyyyMMdd) {
        try {
                
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
            Calendar cal = Calendar.getInstance();
            //這一句必需要設置,不然美國認爲第一天是週日,而我國認爲是週一,對計算當期日期是第幾週會有錯誤
            cal.setFirstDayOfWeek(Calendar.MONDAY);
            cal.setTime(df.parse(yyyyMMdd));
            return String.valueOf(cal.get(Calendar.WEEK_OF_YEAR));
                
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
        
複製代碼

2、Mysql的時間查詢

在使用數據庫操做時,也會常常用到按照必定的時間要求來去查詢或者進行操做。orm

1 查詢當天的記錄rem

select * from `student` where to_days(create_time) = to_days(now());
複製代碼

2 查詢當週的記錄字符串

//其中的 -insterval 1 day 是由於國外一週從週日開始,這裏-1從週一開始計算
select * from `student`  where yearweek(date_format(`create_time`, '%y-%m-%d') - interval 1 day) = yearweek(now() - interval 1 day);
複製代碼

3 查詢上週的記錄get

select * from `student`  where yearweek(date_format(`create_time`, '%y-%m-%d') - interval 1 day) =  yearweek(now() - interval 1 day) -1;
複製代碼

4 查詢7天記錄

//根據 interval X day 來調整日期
select * from `student` where date_sub(curdate(), interval 7 day) <= date(`create_time`);
複製代碼

5 查詢月份記錄

// = 0是當月 若是是1則是上個月
select * from `student`  where period_diff( date_format( now( ) , '%y%m' ) , date_format(`create_time`, '%y%m' ) ) = 0
複製代碼

6 查詢季度記錄

select * from `student` where QUARTER(`create_time`)= QUARTER(now());
複製代碼

7 查詢上季度記錄

// 根據 interval X QUARTER 來調整季度
select * from `student` where QUARTER(`create_time`)= QUARTER(now(),interval 1 QUARTER));
複製代碼

8 查詢當年記錄

select * from `eco_yunyan_status_history` where YEAR(`create_time`)= YEAR(now());
複製代碼

9 查詢去年記錄

select * from `eco_yunyan_status_history` where YEAR(`create_time`)= YEAR(now()) -1;

複製代碼

      以上就是總結一些經常使用的在Java裏的時間、日曆的使用,以及一些簡單的Mysql的時間範圍查詢,多多指教,互相學習,下次寫提升一些的文章。

相關文章
相關標籤/搜索