Calendar详解
?究竟什么是一個 Calendar 呢?中文的翻譯就是日歷,那我們立刻可以想到我們生活中有陽(公)歷、陰(農)歷之分。它們的區別在哪呢?
??? 比如:
??? 月份的定義 - 陽(公)歷 一年12 個月,每個月的天數各不同;
??? 陰(農)歷,每個月固定28天;
??? 每周的第一天 - 陽(公)歷星期日是第一天;陰(農)歷,星期一是第一天;
??? 實際上,在歷史上有著許多種紀元的方法。它們的差異實在太大了,比如說一個人的生日是"八月八日" 那么一種可能是陽(公)歷的八月八日,但也可以是陰(農)歷的日期。所以為了計時的統一,必需指定一個日歷的選擇。那現在最為普及和通用的日歷就 是"Gregorian Calendar"。也就是我們在講述年份時常用 "公元幾幾年"。Calendar 抽象類定義了足夠的方法,讓我們能夠表述日歷的規則。
Java 本身提供了對 "Gregorian Calendar" 規則的實現。我們從 Calendar.getInstance() 中所獲得的實例就是一個 "GreogrianCalendar" 對象(與您通過 new GregorianCalendar() 獲得的結果一致)。
1 Calendar 在 Java 中是一個抽象類(Abstract Class),GregorianCalendar 是它的一個具體實現。
例子1:
public static void main(String[] args) throws ParseException{??
??????? Calendar calendar = Calendar.getInstance();
??????? //在java中可以使用instanceof關鍵字判斷一個對象到底是那個類的實例
??????? if (calendar instanceof GregorianCalendar)
??????? System.out.println("calendar is an instance of GregorianCalendar");
??????? }
2 Calendar 與 Date 直接的轉換非常簡單:
??? ?Calendar calendar = Calendar.getInstance();
??? ?// 從一個 Calendar 對象中獲取 Date 對象
??? ?java.util.Date date = (java.util.Date) calendar.getTime();
??? ?// 將 Date 對象反應到一個 Calendar 對象中,
??? ?// Calendar/GregorianCalendar 沒有構造函數可以接受 Date 對象
??? ?// 所以我們必需先獲得一個實例,然后設置 Date 對象
??? ?calendar.setTime(date);
3 實例:
Calendar cal = Calendar.getInstance();
??? ?//當前年
???????? int year = cal.get(Calendar.YEAR);
???????? //當前月
???????? int month = (cal.get(Calendar.MONTH))+1;
???????? //當前月的第幾天:即當前日
???????? int day_of_month = cal.get(Calendar.DAY_OF_MONTH);
???????? //當前時:HOUR_OF_DAY-24小時制;HOUR-12小時制
???????? int hour = cal.get(Calendar.HOUR_OF_DAY);
???????? //當前分
???????? int minute = cal.get(Calendar.MINUTE);
???????? //當前秒
???????? int second = cal.get(Calendar.SECOND);
???????? //0-上午;1-下午
???????? int ampm = cal.get(Calendar.AM_PM);
???????? //當前年的第幾周
???????? int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);
???????? //當前月的第幾周
???????? int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);
???????? //當前年的第幾天
???????? int day_of_year = cal.get(Calendar.DAY_OF_YEAR);
???????? System.out.println(year+"-"+month+"-"+day_of_month+" "+hour+":"+minute+":"+second+"--【0-上午;1-下午】:"+ampm+"--【當前年的第幾 周】:"+week_of_year+"--【當前月的第幾周】:"+week_of_month+"--【當前年的第幾 天】:"+day_of_year);
4 實例:
Calendar calendar=Calendar.getInstance();
???????? System.out.println("現在時間是:"+new Date());
???????? String year=String.valueOf(calendar.get(Calendar.YEAR));
???????? String month=String.valueOf(calendar.get(Calendar.MONTH)+1);
???????? String day=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
???????? String week=String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)-1);
???????? System.out.println("現在時間是:"+year+"年"+month+"月"+day+"日,星期"+week);
???????? long year2009=calendar.getTimeInMillis();
???????? calendar.set(1989,9,26);//這里與真實的月份之間相差1
???????? long year1989=calendar.getTimeInMillis();
???????? long days=(year2009-year1989)/(1000*60*60*24);
???????? System.out.println("今天和1989年10月26日相隔"+days+"天,"+"也就是說我在這個美麗的星球上已經幸福的生活了"+days+"天。");
5 實例:
Calendar cal1 = Calendar.getInstance();
???????? Date date=new Date();
???????? cal1.setTime(date);//cal1.setTime(new Date());
???????? Calendar cal2 = Calendar.getInstance();
???????? cal2.setTime(date);
???????? System.out.println(cal1.get(Calendar.YEAR)-cal2.get(Calendar.YEAR));
???????? System.out.println(cal1.get(Calendar.MONTH)-cal2.get(Calendar.MONTH));
???????? System.out.println(cal1.get(Calendar.MONTH));
???????? System.out.println(cal1.get(Calendar.YEAR));
???????? System.out.println(cal1.get(Calendar.MONTH)-cal2.get(Calendar.YEAR));
6 實例
// 判斷當前日期是星期幾<br>?
?// @param pTime 修要判斷的時間<br>?
?//@return dayForWeek 判斷結果<br>?
?// @Exception 發生異常<br>???
public static int dayForWeek(String pTime) throws Exception {?
?? format = new SimpleDateFormat("yyyy-MM-dd");?
?? Calendar c = Calendar.getInstance();?
?? c.setTime(format.parse(pTime));?
?? int dayForWeek = 0;?
?? if(c.get(Calendar.DAY_OF_WEEK) == 1){?
???? dayForWeek = 7;?
?? }else{?
???? dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;?
?? }?
?? return dayForWeek;?
}?
轉載于:https://www.cnblogs.com/xingmeng/archive/2012/08/14/2637885.html
總結
以上是生活随笔為你收集整理的Calendar详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.Net_图片上传的一个类库的源码
- 下一篇: 吃好吃的说说发朋友圈 一句话美食心情说说