Java關於日期的計算持續匯總~


 1     /**
 2      * 00
 3      * 描述:傳入Date date.轉為 String yyyyMMdd.
 4      * 【時間 2019-04-18 15:41:12 作者 陶攀峰】
 5      */
 6     public static String getDateToString(Date date) {
 7         Calendar calendar = Calendar.getInstance();
 8         calendar.setTime(date);
 9         return new SimpleDateFormat("yyyyMMdd").format(calendar.getTime());
10     }
0描述:傳入Date date.返回String yyyyMMdd.
 1 /**
 2      * 01 
 3      * 描述:獲取傳入日期前一天 .
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:20:44 作者 陶攀峰】
 6      */
 7     public static String getYesterday(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.add(Calendar.DATE, - 1);
16         return simpleDateFormat.format(calendar.getTime());
17     }
1描述:獲取傳入日期前一天 .
 1 /**
 2      * 02 
 3      * 描述:獲取傳入日期前七天 .
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:20:56 作者 陶攀峰】
 6      */
 7     public static String getBeforeSevenDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.add(Calendar.DATE, - 7);
16         return simpleDateFormat.format(calendar.getTime());
17     }
2描述:獲取傳入日期前七天 .
 1 /**
 2      * 03
 3      * 描述:獲取傳入日期前六天 .
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:21:07 作者 陶攀峰】
 6      */
 7     public static String getBeforeSixDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.add(Calendar.DATE, - 6);
16         return simpleDateFormat.format(calendar.getTime());
17     }
3描述:獲取傳入日期前六天 .
 1 /**
 2      * 04
 3      * 描述:獲取傳入日期所在月的第一天.
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:21:17 作者 陶攀峰】
 6      */
 7     public static String getNowMonthFirstDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.set(Calendar.DAY_OF_MONTH, 1);
16         return simpleDateFormat.format(calendar.getTime());
17     }
4描述:獲取傳入日期所在月的第一天.
 1     /**
 2      * 05
 3      * 描述:獲取傳入日期所在月的最后一天.
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:21:28 作者 陶攀峰】
 6      */
 7     public static String getNowMonthFinallyDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
16         return simpleDateFormat.format(calendar.getTime());
17     }    
5描述:獲取傳入日期所在月的最后一天.
 1     /**
 2      * 06
 3      * 描述:獲取傳入日期上個月的第一天.
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:21:38 作者 陶攀峰】
 6      */
 7     public static String getLastMonthFirstDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.add(Calendar.MONTH, -1);// 月份減一
16         calendar.set(Calendar.DAY_OF_MONTH, 1);
17         return simpleDateFormat.format(calendar.getTime());
18     }
6描述:獲取傳入日期上個月的第一天.
 1     /**
 2      * 07
 3      * 描述:獲取傳入日期上個月的最后一天.
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 【時間 2019-04-15 16:21:47 作者 陶攀峰】
 6      */
 7     public static String getLastMonthFinallyDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         calendar.add(Calendar.MONTH, -1);// 月份減一
16         calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
17         return simpleDateFormat.format(calendar.getTime());
18     }
7描述:獲取傳入日期上個月的最后一天.
 1 /**
 2      * 08
 3      * 描述:獲取傳入時間 + i 天 后的日期.
 4      * 參數格式String yyyyMMdd,int .返回String yyyyMMdd .
 5      * i=0表示今天.i=1表示明天.i=-1表示昨天.
 6      * 【時間 2019-04-15 16:21:57 作者 陶攀峰】
 7      */
 8     public static String getDayByI(String y_date, int i) {
 9         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
10         Calendar calendar = Calendar.getInstance();
11         try {
12             calendar.setTime(simpleDateFormat.parse(y_date));
13         } catch (ParseException e) {
14             e.printStackTrace();
15         }
16         calendar.add(Calendar.DATE, i);
17         return simpleDateFormat.format(calendar.getTime());
18     }
8描述:獲取傳入時間 + i 天 后的日期.
 1 /**
 2      * 09
 3      * 描述:獲取傳入時間 + i 月 后的日期.
 4      * 參數格式String yyyyMMdd,int .返回String yyyyMMdd .
 5      * i=0 表示本月. i=1表示下個月 .i=-1表示上個月 
 6      * 【時間 2019-04-15 16:22:06 作者 陶攀峰】
 7      */
 8     public static String getMonthByI(String y_date,int i) {
 9         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
10         Calendar calendar = Calendar.getInstance();
11         try {
12             calendar.setTime(simpleDateFormat.parse(y_date));
13         } catch (ParseException e) {
14             e.printStackTrace();
15         }
16         calendar.add(Calendar.MONTH, i);// i為0 表示本月 i為1表示下個月 i為-1表示上個月 
17         return simpleDateFormat.format(calendar.getTime()).substring(0, 6);
18     }
9描述:獲取傳入時間 + i 月 后的日期.
 1     /**
 2      * 10
 3      * 描述:獲取當前系統時間.
 4      * 得到String yyyyMMdd .
 5      * 【時間 2019-04-15 16:22:15 作者 陶攀峰】
 6      */
 7     public static String getNowSystemDay() {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         calendar.setTime(new Date());
11         return simpleDateFormat.format(calendar.getTime());
12     }
10描述:獲取當前系統時間.
 1 /**
 2      * 11
 3      * 描述:獲取當前系統時間的小時數(16:12 就返回16).
 4      * 返回int.
 5      * 【時間 2019年4月15日下午4:11:30 作者 陶攀峰】
 6      */
 7     public static int getNowSystemHour() {
 8         Calendar calendar = Calendar.getInstance();
 9         calendar.setTime(new Date());
10         int hour = calendar.get(Calendar.HOUR_OF_DAY);
11         return hour;
12     }
11描述:獲取當前系統時間的小時數(16:12 就返回16).
 1 /**
 2      * 12
 3      * 描述:根據傳進來的時間獲取年份.
 4      * 參數格式String yyyyMMdd.返回int.
 5      * 【時間 2019-04-16 08:28:21 作者 陶攀峰】
 6      */
 7     public static int getYear(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         int year = calendar.get(Calendar.YEAR);
16         return year;
17     }
12描述:根據傳進來的時間獲取年份.
 1 /**
 2      * 13
 3      * 描述:根據傳進來的時間獲取月份.
 4      * 參數格式String yyyyMMdd.返回int.
 5      * 【時間 2019-04-16 08:30:45 作者 陶攀峰】
 6      */
 7     public static int getMonth(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         int month = calendar.get(Calendar.MONTH) + 1;
16         return month;
17     }
13描述:根據傳進來的時間獲取月份.
 1     /**
 2      * 14
 3      * 描述:根據傳進來的時間獲取天數
 4      * 參數格式String yyyyMMdd.返回int.
 5      * 【時間 2019-04-16 08:31:19 作者 陶攀峰】
 6      */
 7     public static int getDay(String y_date) {
 8         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
 9         Calendar calendar = Calendar.getInstance();
10         try {
11             calendar.setTime(simpleDateFormat.parse(y_date));
12         } catch (ParseException e) {
13             e.printStackTrace();
14         }
15         int day = calendar.get(Calendar.DATE);
16         return day;
17     }
14描述:根據傳進來的時間獲取天數
 1 /**
 2      * 15
 3      * 描述:根據指定年和月 得到指定月的天數. 
 4      * 傳入int year,int month. 返回 int. 
 5      * 【時間 2019-04-16 08:31:59 作者 陶攀峰】
 6      */
 7     public static int getDayByYearMonth(int year, int month) {
 8         Calendar a = Calendar.getInstance();
 9         a.set(Calendar.YEAR, year);
10         a.set(Calendar.MONTH, month - 1);
11         a.set(Calendar.DATE, 1);// 把日期設置為當月第一天
12         a.roll(Calendar.DATE, -1);// 日期回滾一天,也就是最后一天
13         int maxDate = a.get(Calendar.DATE);
14         return maxDate;
15     }
15描述:根據指定年和月 得到指定月的天數.
 1 /**
 2      * 16
 3      * 描述:把yyyyMMdd格式改為yyyy-MM-dd格式.
 4      * 參數格式String yyyyMMdd. 返回String yyyy-MM-dd. 
 5      * 【時間 2019-04-16 08:33:20 作者 陶攀峰】
 6      */
 7     public static String ChangeDateFormat(String y_date) {
 8         y_date = y_date.substring(0, 4) + "-" + y_date.substring(4, 6) + "-" + y_date.substring(6, 8);
 9         return y_date;
10     }
16描述:把yyyyMMdd格式改為yyyy-MM-dd格式.
 1 /**
 2      * 17
 3      * 描述:獲取下個月一號的數據.
 4      * 傳入String yyyyMMdd.返回String yyyyMMdd.
 5      * 例如:20181005 >>> 20181101 . 
 6      * 【時間 2019-04-16 08:34:43 作者 陶攀峰】
 7      */
 8     public static String getNextMonthFirstDay(String y_date) {
 9         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
10         Date date = null;
11         try {
12             date = sdf.parse(y_date);// 把設置的日期轉換為日期格式
13         } catch (ParseException e) {
14             e.printStackTrace();
15         }
16         Calendar calendar = Calendar.getInstance();// 日歷對象
17         calendar.setTime(date);// 設置日期
18         calendar.set(Calendar.DAY_OF_MONTH, 1);// 把當前日期天數設置為01
19         calendar.add(Calendar.MONTH, 1);// 把月份減1
20         return sdf.format(calendar.getTime());
21     }
17描述:獲取下個月一號的數據.
 1 /**
 2      * 18
 3      * 描述:獲取周一.
 4      * i=0 表示傳入時間所在周的周一,i=1表示下周一,i=-1表示上周一.
 5      * 傳入String yyyyMMdd,int. 返回 String yyyyMMdd. 
 6      * 【時間 2019-04-16 08:45:09 作者 陶攀峰】
 7      */
 8     public static String getMondayByIWeek(String y_date,int i) {
 9         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
10         Date date = null;
11         try {
12             date = sdf.parse(y_date);// 把設置的日期轉換為日期格式
13         } catch (ParseException e) {
14             e.printStackTrace();
15         }
16         Calendar cal = Calendar.getInstance();
17         cal.setTime(date);
18 
19         // 獲得當前日期是一個星期的第幾天
20         int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
21         if (1 == dayWeek) {
22             cal.add(Calendar.DAY_OF_MONTH, -1);
23         }
24         // 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
25         cal.setFirstDayOfWeek(Calendar.MONDAY);
26         // 獲得當前日期是一個星期的第幾天
27         int day = cal.get(Calendar.DAY_OF_WEEK);
28         // 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
29         cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
30         cal.add(Calendar.DATE, 7 * i);
31         return sdf.format(cal.getTime());
32     }
18描述:獲取周一. i=0 表示傳入時間所在周的周一,i=1表示下周一,i=-1表示上周一.
 1 /**
 2      * 19
 3      * 描述:返回日期所在星期幾.星期一 為1、星期日為7.
 4      * 傳入日期String yyyyMMdd. 返回int . 
 5      * 【時間 2019-04-16 08:48:30 作者 陶攀峰】
 6      */
 7     public static int getWeekNumber(String y_date) {
 8         Calendar cal = Calendar.getInstance();
 9         try {
10             cal.setTime(new SimpleDateFormat("yyyyMMdd").parse(y_date));
11         } catch (ParseException e) {
12             e.printStackTrace();
13         }
14         return cal.get(Calendar.DAY_OF_WEEK)-1;
15     }
19描述:返回日期所在星期幾.星期一 為1、星期日為7.
 1 /**
 2      * 20
 3      * 描述:周同期【開始>>以周一為開始】.
 4      * 【傳入時間的上一年>>所在周的第一天>>(距離年周數相同>>一年第幾周)】.
 5      * 例【2018-01-10>>2017-01-02】.
 6      * 【時間 2019年3月5日下午3:46:07 作者 陶攀峰】
 7      */
 8     public static String getWeekSamePhaseStart(String y_date) {
 9         SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd");
10         Date date=null;
11         try {
12             date = sdf.parse(y_date);//把設置的日期轉換為日期格式
13         } catch (ParseException e) {
14             e.printStackTrace();
15         }
16         Calendar calendar = Calendar.getInstance();//日歷對象
17         calendar.setTime(date);//設置日期
18         int week_of_year=calendar.get(Calendar.WEEK_OF_YEAR);//當前日期是今年的第多少周【2】
19         int year=calendar.get(Calendar.YEAR)-1;//得到今年年份、減去1得到去年年份【2018-1】     
20         calendar.set(year, 0, 1);//設置日期為2017-01-01
21         int dayofweek=7-calendar.get(Calendar.DAY_OF_WEEK)+1;//【7-1+1】
22         week_of_year=week_of_year-2;//【2-2】
23         calendar.add(Calendar.DAY_OF_YEAR, week_of_year*7+dayofweek);//【0*7+7】【此時日期由2017-01-01>>2017-01-08】
24         int day_of_week = calendar.get(Calendar. DAY_OF_WEEK) - 1;//傳入時間是本周的第幾天【因為DAY_OF_WEEK以周日開始、所以減1】【1-1】
25         if (day_of_week == 0 ) {//因為DAY_OF_WEEK以周日開始、所以原本的周日是第一天 改為第七天
26             day_of_week = 7 ;
27         }
28         calendar.add(Calendar.DATE , -day_of_week + 1 );//【-7+1】【此時日期由2017-01-08>>2017-01-02】
29         return sdf.format(calendar.getTime());
30     }
20描述:周同期【開始>>以周一為開始】.【傳入時間的上一年>>所在周的第一天>>(距離年周數相同>>一年第幾周)】.例【2018-01-10>>2017-01-02】.
 1     /**
 2      * 21
 3      * 描述:周同期【結束>>以周一為開始】.
 4      * 【上一年和傳入時間所在同一個周的第一天>>(距離年周數相同>>一年第幾周)(距離周天數相同>>一周第幾天)】.
 5      * 例【2018-01-10>>2017-01-04】.
 6      * 【時間 2019年3月5日下午3:47:26 作者 陶攀峰】
 7      */
 8     public static String getWeekSamePhaseEnd(String y_date) {
 9         SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd");
10         Date date=null;
11         try {
12             date = sdf.parse(y_date);//把設置的日期轉換為日期格式
13         } catch (ParseException e) {
14             e.printStackTrace();
15         }
16         Calendar calendar = Calendar.getInstance();//日歷對象
17         calendar.setTime(date);//設置日期
18         int day_of_week0 = calendar.get(Calendar. DAY_OF_WEEK) - 1;//傳入時間是本周的第幾天【因為DAY_OF_WEEK以周日開始、所以減1】【4-1】
19         if (day_of_week0 == 0 ) {//因為DAY_OF_WEEK以周日開始、所以原本的周日是第一天 改為第七天
20             day_of_week0 = 7 ;
21         }
22         int week_of_year=calendar.get(Calendar.WEEK_OF_YEAR);//當前日期是今年的第多少周【2】
23         int year=calendar.get(Calendar.YEAR)-1;//得到今年年份、減去1得到去年年份【2018-1】     
24         calendar.set(year, 0, 1);//設置日期為2017-01-01
25         int dayofweek=7-calendar.get(Calendar.DAY_OF_WEEK)+1;//【7-1+1】
26         week_of_year=week_of_year-2;//【2-2】
27         calendar.add(Calendar.DAY_OF_YEAR, week_of_year*7+dayofweek);//【0*7+7】【此時日期由2017-01-01>>2017-01-08】
28         int day_of_week = calendar.get(Calendar. DAY_OF_WEEK) - 1;//傳入時間是本周的第幾天【因為DAY_OF_WEEK以周日開始、所以減1】【1-1】
29         if (day_of_week == 0 ) {//因為DAY_OF_WEEK以周日開始、所以原本的周日是第一天 改為第七天
30             day_of_week = 7 ;
31         }
32         calendar.add(Calendar.DATE , -day_of_week + 1 );//【-7+1】【此時日期由2017-01-08>>2017-01-02】
33         calendar.add(Calendar.DATE, day_of_week0-1);//【3-1】【此時日期由2017-01-02>>2017-01-04】
34         return sdf.format(calendar.getTime());
35     }
21描述:周同期【結束>>以周一為開始】.【上一年和傳入時間所在同一個周的第一天>>(距離年周數相同>>一年第幾周)(距離周天數相同>>一周第幾天)】.例【2018-01-10>>2017-01-04】.

 

 注意:

以后有新的會更新,若不懂的也可以提問,錯誤的可以糾正,

如果我這里面沒有的 你們也可以提出來 我要會的話,也會寫出來~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM