在开发中经常会使用到一些日期方面的操作,下面例子展示几个常用的操作。

1、取得指定日期是星期几

取得指定日期是星期几可以采用下面两种方式取得日期是星期几:

a、使用Calendar类



[java] view plain copy print ?


  1. //根据日期取得星期几

public static String getWeek(Date date){ String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; Calendar cal = Calendar.getInstance(); cal.setTime(date); int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1; if(week_index<0){ week_index = 0; } return weeks[week_index]; }





b、使用SimpleDateFormat类



[java] view plain copy print ?




//根据日期取得星期几  
        public static String getWeek(Date date){   
            SimpleDateFormat sdf = new SimpleDateFormat("EEEE");  
            String week = sdf.format(date);  
            return week;  
        }




注:格式化字符串存在区分大小写
对于创建SimpleDateFormat传入的参数:EEEE代表星期,如“星期四”;MMMM代表中文月份,如“十一月”;MM代表月份,如“11”;
yyyy代表年份,如“2010”;dd代表天,如“25”


        

2、取得日期是某年的第几周

根据日期入得日期是某年的第几周。



[java] view plain copy print ?




//取得日期是某年的第几周  
        public static int getWeekOfYear(Date date){  
            Calendar cal = Calendar.getInstance();  
            cal.setTime(date);  
            int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);  
            return week_of_year;  
        }




3、得到某年的某个月有多少天

已知年份和月份,取得该月有多少天。



[java] view plain copy print ?




//取得某个月有多少天  
        public static int getDaysOfMonth(int year,int month){  
            Calendar cal = Calendar.getInstance();  
            cal.set(Calendar.YEAR, year);  
            cal.set(Calendar.MONTH, month-1);  
            int days_of_month = cal.getActualMaximum(Calendar.DAY_OF_MONTH);  
            return days_of_month;  
        }




4、取得两个日期之间的相差多少天

已知两个日期,计算它们之间相差多少天。



[java] view plain copy print ?




<pre name="code" class="java">// 取得两个日期之间的相差多少天  
        public static long getDaysBetween(Date date0, Date date1) {  
            long daysBetween = (date0.getTime() - date1.getTime() + 1000000) / 86400000;// 86400000=3600*24*1000  用立即数,减少乘法计算的开销  
            return daysBetween;  
        }</pre>  
    <pre></pre>  
    <pre></pre>  
    <pre></pre>  
    <pre></pre>  
    <pre></pre>




5、完整的测试代码





[java] view plain copy print?

        package org.ml.test;  
          
        import java.text.ParseException;  
        import java.text.SimpleDateFormat;  
        import java.util.Calendar;  
        import java.util.Date;  
          
        public class CalendarDemo {  
            public static void main(String[] args) {  
                String strDate = "2013-03-08";// 定义日期字符串  
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");// 定义日期格式  
                Date date = null;  
                try {  
                    date = format.parse(strDate);// 将字符串转换为日期  
                } catch (ParseException e) {  
                    System.out.println("输入的日期格式不合理!");  
                }  
                System.out.println(strDate + "是:" + getWeek(date));  
                System.out.println(strDate + "是一年的第:" + getWeekOfYear(date) + "周");  
                System.out.println(strDate + "是一年的" + (date.getMonth() + 1) + "月有:"  
                        + getDaysOfMonth(date.getYear(), date.getMonth() + 1) + "天");  
                System.out.println(strDate + "距离" + (format.format(new Date())) + "还有"  
                        + getDaysBetween(date, new Date()) + "天");  
          
            }  
          
            // 根据日期取得星期几  
            public static String getWeek(Date date) {  
                // String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};  
                // Calendar cal = Calendar.getInstance();  
                // cal.setTime(date);  
                // int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;  
                // if(week_index<0){  
                // week_index = 0;  
                // }  
                // return weeks[week_index];  
                SimpleDateFormat sdf = new SimpleDateFormat("EEEE");  
                String week = sdf.format(date);  
                return week;  
            }  
          
            // 取得日期是某年的第几周  
            public static int getWeekOfYear(Date date) {  
                Calendar cal = Calendar.getInstance();  
                cal.setTime(date);  
                int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);  
                return week_of_year;  
            }  
          
            // 取得某个月有多少天  
            public static int getDaysOfMonth(int year, int month) {  
                Calendar cal = Calendar.getInstance();  
                cal.set(Calendar.YEAR, year);  
                cal.set(Calendar.MONTH, month-1);  
                int days_of_month = cal.getActualMaximum(Calendar.DAY_OF_MONTH);  
                return days_of_month;  
            }  
          
            // 取得两个日期之间的相差多少天  
            public static long getDaysBetween(Date date0, Date date1) {  
                long daysBetween = (date0.getTime() - date1.getTime() + 1000000) / 86400000;// 86400000=3600*24*1000  用立即数,减少乘法计算的开销  
                return daysBetween;  
            }  
          
        }  

6、测试结果


7、引出的问题

    看下面的代码:
    [java] view plain copy print?

        public static void main(String[] args) throws Exception{  
            String strDate = "999-999-999";// 定义日期字符串  
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");// 定义日期格式  
            Date date = null;  
        try {  
            date = format.parse(strDate);// 将字符串转换为日期  
        } catch (ParseException e) {  
            System.out.println("日期格式有误,请给出正确的日期格式");  
            return;  
        }  
            System.out.println(format.format(date));   
        }  

    Java中使用yyyy-MM-dd日期格式进行转换,转换字符串为999-999-999时,没有出现异常,反倒是执行通过了。

    运行结果:1084-11-23