Java Date 和 Calendar 实例

引用:点击打开链接

Java 之 Date 和 Calendar 实例

  1. package com.homer.learn;  
  2.   
  3. import java.text.DateFormat;  
  4. import java.text.ParsePosition;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Calendar;  
  7. import java.util.Date;  
  8. import java.util.GregorianCalendar;  
  9.   
  10.   
  11. public class TimeTest {  
  12.     public static void main(String[] args) {  
  13.         TimeTest tt = new TimeTest();  
  14.   
  15.         System.out.println("\n当前日期: ");  
  16.         System.out.println(tt.getNowTime());                    // 获取当前时间  
  17.         System.out.println(tt.getNowTime2());                   // 获取当前时间  
  18.         System.out.println(tt.getNowTime3());                   // 获取当前时间  
  19.           
  20.         System.out.println("\n计算周: ");  
  21.         System.out.println(tt.getDaysOfNow2SundayInWeek());     // 获取当前日期与本周日的相差天数  
  22.         System.out.println(tt.getDateOfMondayInWeek());         // 获取本周一的日期  
  23.         System.out.println(tt.getDateOfSaturdayInWeek());       // 获取本周六的日期  
  24.         System.out.println(tt.getDateOfSaturdayInNextWeek());   // 获取下周一的日期  
  25.         System.out.println(tt.getDateOfSaturdayInLastWeek());   // 获取上周一的日期  
  26.   
  27.   
  28.         System.out.println("\n计算月: ");  
  29.         System.out.println(tt.getFirstDayOfMonth());            // 获取当月的第一天  
  30.         System.out.println(tt.getLastDayOfMonth());             // 获取当月最后一天  
  31.         System.out.println(tt.getFirstDayOfPreviousMonth());    // 获取上月第一天        
  32.         System.out.println(tt.getLastDayOfPreviousMonth());     // 获取上月最后一天           
  33.         System.out.println(tt.getFirstDayOfNextMonth());        // 获取下月第一天    
  34.         System.out.println(tt.getLastDayOfNextMonth());         // 获取下月最后一天  
  35.           
  36.   
  37.         System.out.println("\n计算年: ");  
  38.         System.out.println(tt.getFirstDayOfYear());             // 获取本年的第一天  
  39.         System.out.println(tt.getLastDayOfYear());              // 获取本年最后一天  
  40.         System.out.println(tt.getFirstDayOfPreviousYear());     // 获取上年的第一天  
  41.         System.out.println(tt.getLastDayOfPreviousYear());      // 获取上年最后一天  
  42.         System.out.println(tt.getFirstDayOfNextYear());         // 获取下年的第一天  
  43.         System.out.println(tt.getLastDayOfNextYear());          // 获取下年最后一天  
  44.         System.out.println(tt.getDaysOfYear());                 // 获取本年的天数  
  45.           
  46.   
  47.         System.out.println("\n计算季度: ");  
  48.         System.out.println(tt.getSeasonOfMonth());              // 获取当前月的季度  
  49.         System.out.println(tt.getLastDayOfNow());               // 获取当前天所在月份的天数  
  50.         System.out.println(tt.isLeapYear(2012));                // 判断是否是润年  
  51.           
  52.   
  53.         System.out.println("\n日期格式转换与计算: ");  
  54.         System.out.println(tt.getDateFromStr("2012-06-20"));    // 将字符串时间格式 yyyy-MM-dd,转换成Date类型  
  55.         System.out.println(tt.getWeek("2012-06-20"));           // 根据一个日期,返回是星期几的字符串  
  56.         System.out.print("2012-06-02 -> 2012-06-12间隔天数:");   // 计算两个日期间的间隔天数  
  57.         System.out.println(tt.getDaysFromTwoDate("2012-06-02""2012-06-12"));            
  58.     }  
  59.   
  60.       
  61.       
  62.     // 获取当前时间  
  63.     public String getNowTime() {  
  64.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  65.           
  66.         Date now = new Date();  
  67.         return sDateFormat.format(now);  
  68.     }  
  69.   
  70.     public String getNowTime2() {  
  71.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  72.           
  73.         Date now = new Date(System.currentTimeMillis());  
  74.         return sDateFormat.format(now);  
  75.     }  
  76.   
  77.     public String getNowTime3() {  
  78.         StringBuilder strBuildNow = new StringBuilder();  
  79.           
  80.         Calendar calendar = Calendar.getInstance();  
  81.         int year = calendar.get(Calendar.YEAR);  
  82.         int month = calendar.get(Calendar.MONTH) + 1;  
  83.         int day = calendar.get(Calendar.DAY_OF_MONTH);  
  84.         int hour = calendar.get(Calendar.HOUR_OF_DAY);  
  85.         int minute = calendar.get(Calendar.MINUTE);  
  86.         int second = calendar.get(Calendar.SECOND);  
  87.         int millissecond = calendar.get(Calendar.MILLISECOND);  
  88.           
  89.         strBuildNow.append(year + "-");  
  90.         strBuildNow.append(month + "-");  
  91.         strBuildNow.append(day + " ");  
  92.         strBuildNow.append(hour + ":");  
  93.         strBuildNow.append(minute + ":");  
  94.         strBuildNow.append(second + ".");  
  95.         strBuildNow.append(millissecond);  
  96.           
  97.         return strBuildNow.toString();  
  98.     }  
  99.       
  100.       
  101.       
  102.       
  103.     // 获取当前日期与本周日的相差天数  
  104.     public int getDaysOfNow2SundayInWeek() {  
  105.         Calendar calendar = Calendar.getInstance();  
  106.           
  107.         int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;     // 减一天,周一为1,符合中国人习惯。Sunday - 1; Monday - 2; Saturday - 7  
  108.         if(dayOfWeek == 0) {        // 周日  
  109.             return 0;  
  110.         } else {  
  111.             return 0 - dayOfWeek;  
  112.         }  
  113.     }  
  114.       
  115.     // 获取本周一的日期  
  116.     public String getDateOfMondayInWeek(){  
  117.         int day = this.getDaysOfNow2SundayInWeek() + 1// 加1,即周一离本周日的间隔天数  
  118.         GregorianCalendar gCalendar = new GregorianCalendar();  
  119.           
  120.         gCalendar.add(GregorianCalendar.DATE, day);     // 计算与本周一相差的时间间隔  
  121.         Date curDay = gCalendar.getTime();  
  122.           
  123.         DateFormat dateFormat = DateFormat.getInstance();  
  124.         String dateOfMonday = dateFormat.format(curDay);  
  125.           
  126.         return dateOfMonday;  
  127.     }  
  128.   
  129.     // 获取本周六的日期  
  130.     public String getDateOfSaturdayInWeek(){  
  131.         int day = this.getDaysOfNow2SundayInWeek() + 6// 加6,即周六离本周日的间隔天数  
  132.         GregorianCalendar gCalendar = new GregorianCalendar();  
  133.           
  134.         gCalendar.add(GregorianCalendar.DATE, day);     // 计算与本周六相差的时间间隔  
  135.         Date curDay = gCalendar.getTime();  
  136.           
  137.         DateFormat dateFormat = DateFormat.getInstance();  
  138.         String dateOfMonday = dateFormat.format(curDay);  
  139.           
  140.         return dateOfMonday;  
  141.     }  
  142.   
  143.     // 获取上周一的日期  
  144.     public String getDateOfSaturdayInLastWeek(){  
  145.         int day = this.getDaysOfNow2SundayInWeek() - 1// 减1,即上周一离本周日的间隔天数  
  146.         GregorianCalendar gCalendar = new GregorianCalendar();  
  147.           
  148.         gCalendar.add(GregorianCalendar.DATE, day);     // 计算与上周一相差的时间间隔  
  149.         Date curDay = gCalendar.getTime();  
  150.           
  151.         DateFormat dateFormat = DateFormat.getInstance();  
  152.         String dateOfMonday = dateFormat.format(curDay);  
  153.           
  154.         return dateOfMonday;  
  155.     }  
  156.       
  157.     // 获取下周一的日期  
  158.     public String getDateOfSaturdayInNextWeek(){  
  159.         int day = this.getDaysOfNow2SundayInWeek() + 8// 加8,即下周一离本周日的间隔天数  
  160.         GregorianCalendar gCalendar = new GregorianCalendar();  
  161.           
  162.         gCalendar.add(GregorianCalendar.DATE, day);     // 计算与下周一相差的时间间隔  
  163.         Date curDay = gCalendar.getTime();  
  164.           
  165.         DateFormat dateFormat = DateFormat.getInstance();  
  166.         String dateOfMonday = dateFormat.format(curDay);  
  167.           
  168.         return dateOfMonday;  
  169.     }  
  170.       
  171.       
  172.       
  173.   
  174.     // 获取当月第一天  
  175.     public String getFirstDayOfMonth() {  
  176.         String strFirstDay = "";  
  177.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  178.           
  179.         Calendar calendar = Calendar.getInstance();  
  180.         calendar.set(Calendar.DATE, 1);     // 设置当前月的1号  
  181.           
  182.         strFirstDay = sDateFormat.format(calendar.getTime());  
  183.         return strFirstDay;  
  184.     }  
  185.   
  186.     // 获取当月最后一天  
  187.     public String getLastDayOfMonth() {  
  188.         String strLastDay = "";  
  189.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  190.           
  191.         Calendar calendar = Calendar.getInstance();  
  192.         calendar.set(Calendar.DATE, 1);     // 设置当前月的1号  
  193.         calendar.add(Calendar.MONDAY, 1);   // 加一个月,变为下月的1号  
  194.         calendar.add(Calendar.DATE, -1);    // 减去一天,变为当前月的最后一天  
  195.           
  196.         strLastDay = sDateFormat.format(calendar.getTime());  
  197.         return strLastDay;  
  198.     }  
  199.   
  200.     // 获取上月第一天  
  201.     public String getFirstDayOfPreviousMonth() {  
  202.         String strFirstDay = "";  
  203.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  204.           
  205.         Calendar calendar = Calendar.getInstance();  
  206.         calendar.set(Calendar.DATE, 1);     // 设置当前月的1号  
  207.         calendar.add(Calendar.MONDAY, -1);  // 减一个月,变为上月的1号  
  208.           
  209.         strFirstDay = sDateFormat.format(calendar.getTime());  
  210.         return strFirstDay;  
  211.     }  
  212.   
  213.     // 获取上月最后一天  
  214.     public String getLastDayOfPreviousMonth() {  
  215.         String strLastDay = "";  
  216.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  217.           
  218.         Calendar calendar = Calendar.getInstance();  
  219.         calendar.set(Calendar.DATE, 1);     // 设置当前月的1号  
  220.         calendar.add(Calendar.DATE, -1);    // 减一天,变为上月的1号  
  221.           
  222.         strLastDay = sDateFormat.format(calendar.getTime());  
  223.         return strLastDay;  
  224.     }  
  225.   
  226.     public String getLastDayOfPreviousMonth2() {  
  227.         String strLastDay = "";  
  228.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  229.           
  230.         Calendar calendar = Calendar.getInstance();  
  231.         calendar.add(Calendar.MONDAY, -1);  // 减一个月  
  232.         calendar.set(Calendar.DATE, 1);     // 设置当前月的1号  
  233.         calendar.roll(Calendar.DATE, -1);   // 把日期回滚一天,也就是本月最后一天  
  234.           
  235.         strLastDay = sDateFormat.format(calendar.getTime());  
  236.         return strLastDay;  
  237.     }  
  238.       
  239.     // 获取下月第一天  
  240.     public String getFirstDayOfNextMonth() {  
  241.         String strFirstDay = "";  
  242.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  243.           
  244.         Calendar calendar = Calendar.getInstance();  
  245.         calendar.add(Calendar.MONTH, 1);    // 加一个月  
  246.         calendar.set(Calendar.DATE, 1);     // 设置当前月第一天  
  247.           
  248.         strFirstDay = sDateFormat.format(calendar.getTime());  
  249.         return strFirstDay;  
  250.     }  
  251.   
  252.     // 获取下月最后一天  
  253.     public String getLastDayOfNextMonth() {  
  254.         String strLastDay = "";  
  255.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  256.           
  257.         Calendar calendar = Calendar.getInstance();  
  258.         calendar.set(Calendar.DATE, 1);     // 设置当前月的1号  
  259.         calendar.add(Calendar.MONDAY, 2);   // 加两个月,变为下下月的1号  
  260.         calendar.add(Calendar.DATE, -1);    // 减一天,变为下月的最后一天  
  261.           
  262.         strLastDay = sDateFormat.format(calendar.getTime());  
  263.         return strLastDay;  
  264.     }  
  265.   
  266.     public String getLastDayOfNextMonth2(){  
  267.         String strLastDay = "";  
  268.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  269.           
  270.         Calendar calendar = Calendar.getInstance();  
  271.         calendar.add(Calendar.MONTH, 1);    // 加1个月  
  272.         calendar.set(Calendar.DATE, 1);     // 把日期设置为当月第1天  
  273.         calendar.roll(Calendar.DATE, -1);   // 日期回滚1天,也就是本月最后1天  
  274.           
  275.         strLastDay = sDateFormat.format(calendar.getTime());  
  276.         return strLastDay;  
  277.     }  
  278.       
  279.       
  280.       
  281.       
  282.     // 获取本年的第一天  
  283.     public String getFirstDayOfYear(){  
  284.         String strFirstDay = "";  
  285.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  286.           
  287.         Calendar calendar = Calendar.getInstance();  
  288.         calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置当年第一天  
  289.           
  290.         strFirstDay = sDateFormat.format(calendar.getTime());  
  291.         return strFirstDay;  
  292.     }  
  293.   
  294.     // 获取本年的最后一天  
  295.     public String getLastDayOfYear(){  
  296.         String strLastDay = "";  
  297.           
  298.         Calendar calendar = Calendar.getInstance();  
  299.         strLastDay = calendar.get(Calendar.YEAR) + "-12-31";  
  300.           
  301.         return strLastDay;  
  302.     }  
  303.       
  304.     // 获取上年的第一天  
  305.     public String getFirstDayOfPreviousYear(){  
  306.         String strFirstDay = "";  
  307.           
  308.         Calendar calendar = Calendar.getInstance();  
  309.         strFirstDay = (calendar.get(Calendar.YEAR) - 1) + "-01-01";  
  310.           
  311.         return strFirstDay;  
  312.     }  
  313.   
  314.     // 获取上年的最后一天  
  315.     public String getLastDayOfPreviousYear(){  
  316.         String strLastDay = "";  
  317.           
  318.         Calendar calendar = Calendar.getInstance();  
  319.         strLastDay = (calendar.get(Calendar.YEAR) - 1) + "-12-31";  
  320.           
  321.         return strLastDay;  
  322.     }  
  323.       
  324.     // 获取下年的第一天  
  325.     public String getFirstDayOfNextYear(){  
  326.         String strFirstDay = "";  
  327.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  328.           
  329.         Calendar calendar = Calendar.getInstance();  
  330.         calendar.add(Calendar.YEAR, 1);             // 加一年  
  331.         calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置当年第一天  
  332.           
  333.         strFirstDay = sDateFormat.format(calendar.getTime());  
  334.         return strFirstDay;  
  335.     }  
  336.   
  337.     // 获取下年的最后一天  
  338.     public String getLastDayOfNextYear(){  
  339.         String strLastDay = "";  
  340.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  341.           
  342.         Calendar calendar = Calendar.getInstance();  
  343.         calendar.add(Calendar.YEAR, 1);             // 加一年  
  344.         calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置当年第一天  
  345.         calendar.roll(Calendar.DAY_OF_YEAR, -1);    // 回滚到当年最后一天  
  346.           
  347.         strLastDay = sDateFormat.format(calendar.getTime());  
  348.         return strLastDay;  
  349.     }  
  350.       
  351.     // 获取本年的天数  
  352.     public String getDaysOfYear(){  
  353.         int year = 0;  
  354.         int days = 0;  
  355.           
  356.         Calendar calendar = Calendar.getInstance();  
  357.         calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置日期为当年第一天  
  358.         calendar.roll(Calendar.DAY_OF_YEAR, -1);    // 把日期回滚一天  
  359.           
  360.         year = calendar.get(Calendar.YEAR);  
  361.         days = calendar.get(Calendar.DAY_OF_YEAR);  
  362.           
  363.         return (days + " in " + year);  
  364.     }  
  365.       
  366.       
  367.       
  368.       
  369.     // 获取当前月的季度  
  370.     public String getSeasonOfMonth(){  
  371.         String strSeason = "";  
  372.         int year, month, day;  
  373.         int season = 1;  
  374.         int array[][] = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} };  
  375.           
  376.         Calendar calendar = Calendar.getInstance();  
  377.         year = calendar.get(Calendar.YEAR);  
  378.         month = calendar.get(Calendar.MONDAY) + 1;  
  379.         day = calendar.get(Calendar.DAY_OF_MONTH);  
  380.         switch (month) {  
  381.         case 1:  
  382.         case 2:  
  383.         case 3:  
  384.             season = 1;  
  385.             break;  
  386.         case 4:  
  387.         case 5:  
  388.         case 6:  
  389.             season = 2;  
  390.             break;  
  391.         case 7:  
  392.         case 8:  
  393.         case 9:  
  394.             season = 3;  
  395.             break;  
  396.         case 10:  
  397.         case 11:  
  398.         case 12:  
  399.             season = 4;  
  400.             break;  
  401.         default:  
  402.             season = 1;  
  403.             break;  
  404.         }  
  405.           
  406.           
  407.         int start_month = array[season-1][0];  
  408.         int end_month = array[season-1][2];  
  409.         strSeason = year + "-" + month + "-" +day;  
  410.         strSeason += " in [ " + year + "-" + start_month + " : " + year + "-" + end_month + " ]";  
  411.           
  412.         return strSeason;  
  413.     }  
  414.       
  415.       
  416.     // 获取当前天所在月份的天数  
  417.     public String getLastDayOfNow(){  
  418.         String strLastDay = "";  
  419.         int year, month, day;  
  420.         int days = 0;  
  421.           
  422.         Calendar calendar = Calendar.getInstance();  
  423.         year = calendar.get(Calendar.YEAR);  
  424.         month = calendar.get(Calendar.MONTH) + 1;  
  425.         day = calendar.get(Calendar.DAY_OF_MONTH);  
  426.           
  427.         switch (month) {  
  428.         case 1:  
  429.         case 3:  
  430.         case 5:  
  431.         case 7:  
  432.         case 8:  
  433.         case 10:  
  434.         case 12:  
  435.             days = 31;  
  436.             break;  
  437.         case 4:  
  438.         case 6:  
  439.         case 9:  
  440.         case 11:  
  441.             days = 30;  
  442.             break;  
  443.         case 2:  
  444.             if (isLeapYear(year)) {  
  445.                 days = 29;  
  446.             } else {  
  447.                 days = 28;  
  448.             }  
  449.             break;  
  450.         default:  
  451.             days = 0;  
  452.             break;  
  453.         }  
  454.           
  455.         strLastDay = days + " in [ " + year + "-" + month + "-" + day + " ]";  
  456.         return strLastDay;  
  457.     }  
  458.       
  459.     // 判断是否是润年  
  460.     public boolean isLeapYear(int year){  
  461.         return (year%4 == 0 && year%100 != 0) || (year%400 == 0);  
  462.     }  
  463.       
  464.       
  465.       
  466.       
  467.   
  468.     // 将字符串时间格式 yyyy-MM-dd,转换成Date类型  
  469.     public Date getDateFromStr(String txtDate) {  
  470.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  471.         ParsePosition pos = new ParsePosition(0);  
  472.         Date date = sDateFormat.parse(txtDate, pos);  
  473.           
  474.         return date;  
  475.     }  
  476.   
  477.     // 根据一个日期,返回是星期几的字符串  
  478.     public String getWeek(String txtDate) {  
  479.         Date date = getDateFromStr(txtDate);  
  480.         Calendar calendar = Calendar.getInstance();  
  481.           
  482.         calendar.setTime(date);  
  483.         String week = new SimpleDateFormat("EEEE").format(date);  
  484.           
  485.         return week;  
  486.     }  
  487.   
  488.     // 计算两个日期间的间隔天数  
  489.     public long getDaysFromTwoDate(String txtDate1, String txtDate2) {  
  490.         if(txtDate1 == null || txtDate1.equals("")) {  
  491.             return 0;  
  492.         }  
  493.         if(txtDate2 == null || txtDate2.equals("")) {  
  494.             return 0;  
  495.         }  
  496.           
  497.         SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  498.         long days = 0;  
  499.         try {  
  500.             Date date1 = sDateFormat.parse(txtDate1);  
  501.             Date date2 = sDateFormat.parse(txtDate2);  
  502.             days = (date2.getTime() - date1.getTime())/(24*60*60*1000);     // 通过getTime()方法,把时间Date转换成毫秒格式Long类型,进行计算  
  503.         } catch (Exception e) {  
  504.             System.out.println(e.getMessage());  
  505.         }  
  506.           
  507.         return days;  
  508.     }  
  509.       
  510. }  

运行结果:

当前日期: 
2012-03-07
2012-03-07 12:30:11
2012-3-7 12:30:11.101

计算周: 
-3
3/5/12 12:30 PM
3/10/12 12:30 PM
3/12/12 12:30 PM
3/3/12 12:30 PM

计算月: 
2012-03-01
2012-03-31
2012-02-01
2012-02-29
2012-04-01
2012-04-30

计算年: 
2012-01-01
2012-12-31
2011-01-01
2011-12-31
2013-01-01
2013-12-31
366 in 2012

计算季度: 
2012-3-7 in [ 2012-1 : 2012-3 ]
31 in [ 2012-3-7 ]
true

日期格式转换与计算: 
Wed Jun 20 00:00:00 CST 2012
Wednesday
2012-06-02 -> 2012-06-12间隔天数:10


源码下载


参考推荐: Java 之 Date 和 Calendar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值