java日期時間處理小結

這兩週時間的Java開發讓我感受到JAVA語言確實把一些簡單的事情搞得很複雜,好比日期時間處理,或許是考慮不一樣時區國際化跨平臺之類的因素,但JAVA語言處理確實讓我很困惑,相信身邊好多開發的同事也如此,只是簡單知道有這些概念,遇到具體問題還須要上網查找,剛沒事上網搜索了Java時間處理、api相關主題,基本沒有多少滿意結果,就暫時將以爲好的、讓我有些收穫的記錄下來,之後遇到具體問題時再借助網絡資源解決。

Calendar是一個抽象類----專門獲取一個時間點的DAY,MONTH,YEAR,一年中的第幾天,星期幾,一個月中的第幾天等等
Calendar rightNow = Calendar.getInstance()可得到一個Calendar (將當前時間點封裝成一個Calendar對象)
 
java.util.Date類   子類Calendar是一個抽象類----專門獲取一個時間點的DAY,MONTH,YEAR,一年中的第幾天,星期幾,一個月中的第幾天等等
 
Calendar rightNow = Calendar.getInstance()可得到一個Calendar (將當前時間點封裝成一個Calendar對象)
用java.util.Date的三個子類java.sql.Date/java.sql.Time/java.sql.Timestamp處理
       ------------java.sql.Date   只存日期(年月日)
       ------------java.sql.Time   只存時間(時分秒  毫秒???)
       ------------java.sql.Timestamp(時間點):包括日期和時間兩部分(年月日時分秒.納秒)
——————————————————————————————————————————————————————
1.UTC/UT
  世界標準時間
2.GMT
  格林威治時間---1970 年 1 月 1 日 00:00:00(貌似和世界標準時間是一回事)
3.how to get the current time
  1)System.currentTimeMillis-----返回當前時間點的毫秒錶示,通常用於記錄程序的運行時間
  2)Date date = new Date();
  3)Calendar calendar = Calendar.getInstance();
4.how to format it
  日期的格式化(好比年月日的格式---年/月/日或年-月-日)要使用(java.text包中)抽象類DateFormat的子類
  SimpleDateFormat
  new SimpleDateFormat("日期格式")---->MM是月份,mm是分;HH是24小時制,而hh是12小時制
5.how to convert a string to a date/time
  方法一:
  1)已知str="2012,12,21",new SimpleDateFormat("yyyy,MM,dd")----->建立要解析字符串爲日期的格式
  2)sdf.parse(str)--->返回字符串對應的Date------->SimpleDateFormat除了格式化Date爲字符串外,還能把字符串
                                                                            按格式解析爲Date
  方法二:
  1)先將字符串轉爲"yyyy-mm-dd hh:mm:ss.0(納秒)"的格式
  2)調用Timestamp t = new Timestamp().valueOf(str);(Timestamp的靜態方法,util.Date.parse方法已過期..)
 
6.how to process the date/time with database
用java.util.Date的三個子類java.sql.Date/java.sql.Time/java.sql.Timestamp處理

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));    //獲取東八區時間java

  int year = c.get(Calendar.YEAR);    //獲取年
  int month = c.get(Calendar.MONTH) + 1;   //獲取月份,0表示1月份
  int day = c.get(Calendar.DAY_OF_MONTH);    //獲取當前天數
  int first = c.getActualMinimum(c.DAY_OF_MONTH);    //獲取本月最小天數
  int last = c.getActualMaximum(c.DAY_OF_MONTH);    //獲取本月最大天數
  int time = c.get(Calendar.HOUR_OF_DAY);       //獲取當前小時
  int min = c.get(Calendar.MINUTE);          //獲取當前分鐘
  int xx = c.get(Calendar.SECOND);          //獲取當前秒程序員

 

  SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sql

  String curDate = s.format(c.getTime());  //當前日期api


  Date d2 = new Date();

                   //年份
                   int year = d2.getYear() + 1900;
                   //月份
                   int month = d2.getMonth() + 1;
                   //日期
                   int date = d2.getDate();
                   //小時
                   int hour = d2.getHours();
                   //分鐘
                   int minute = d2.getMinutes();
                   //秒
                   int second = d2.getSeconds();
                   //星期幾
                   int day = d2.getDay();
使用Date類中對應的get方法,能夠得到Date類對象中相關的信息,須要注意的是使用getYear得到是Date對象中年份減去1900之後的值,因此須要顯示對應的年份則須要在返回值的基礎上加上1900,月份相似。在Date類中還提供了getDay方法,用於得到Date對象表明的時間是星期幾,Date類規定週日是0,週一是1,週二是2,後續的依次類推。
   //將Date類的對象轉換爲相對時間
                   long t = d3.getTime();
                   System.out.println(t);
                   //將相對時間轉換爲Date類的對象
                   Date d4 = new Date(time);
                   System.out.println(d4);
         使用Date對象中的getTime方法,能夠將Date類的對象轉換爲相對時間,使用Date類的構造方法,能夠將相對時間轉換爲Date類的對象。通過轉換之後,既方便了時間的計算,也使時間顯示比較直觀了。
從JDK1.1版本開始,在處理日期和時間時,系統推薦使用Calendar類進行實現。在設計上,Calendar類的功能要比Date類強大不少,並且在實現方式上也比Date類要複雜一些,下面就介紹一下Calendar類的使用。

Calendar類是一個抽象類,在實際使用時實現特定的子類的對象,建立對象的過程對程序員來講是透明的,只須要使用getInstance方法建立便可。
public final Date getTime() 方法的做用是將Calendar類型的對象轉換爲對應的Date類對象,二者表明相同的時間點。
相似的方法是setTime,該方法的做用是將Date對象轉換爲對應的Calendar對象,該方法的聲明以下: public final void setTime(Date date)
轉換的示例代碼以下:
                  Date d = new Date();
                   Calendar c6 = Calendar.getInstance();
                   //Calendar類型的對象轉換爲Date對象
                   Date d1 = c6.getTime();
                   //Date類型的對象轉換爲Calendar對象
                   Calendar c7 = Calendar.getInstance();
                   c7.setTime(d);
 //將Calendar對象轉換爲相對時間

                            long t1 = c8.getTimeInMillis();

                            //將相對時間轉換爲Calendar對象

                            Calendar c9 = Calendar.getInstance();

                            c9.setTimeInMillis(t1);
/**
 * 計算兩個日期之間相差的天數
 */
public class DateExample1 {
         public static void main(String[] args) {
                   //設置兩個日期
                   //日期:2009年3月11號
                   Calendar c1 = Calendar.getInstance();
                   c1.set(2009, 3 - 1, 11);
                   //日期:2010年4月1號
                   Calendar c2 = Calendar.getInstance();
                   c2.set(2010, 4 - 1, 1);
                   //轉換爲相對時間
                   long t1 = c1.getTimeInMillis();
                   long t2 = c2.getTimeInMillis();
                   //計算天數
                   long days = (t2 - t1)/(24 * 60 * 60 * 1000);
                   System.out.println(days);
         }
}
   import java.util.*;
/**
 * 輸出當前月的日曆
 */
public class DateExample2{
         public static void main(String[] args){
                   //得到當前時間
                   Calendar c = Calendar.getInstance();
                   //設置表明的日期爲1號
                   c.set(Calendar.DATE,1);
                   //得到1號是星期幾
                   int start = c.get(Calendar.DAY_OF_WEEK);
                   //得到當前月的最大日期數
                   int maxDay = c.getActualMaximum(Calendar.DATE);   
                  
                   //輸出標題
                   System.out.println("星期日 星期一 星期二 星期三 星期四 星期五   星期六");
                   //輸出開始的空格
                   for(int i = 1;i < start;i++){
                            System.out.print("      "); 
                   }
                   //輸出該月中的全部日期
                   for(int i = 1;i <= maxDay;i++){
                            //輸出日期數字
                            System.out.print(" " + i);
                            //輸出分隔空格
                            System.out.print("     ");
                            if(i < 10){
                                     System.out.print(' ');
                            }
                            //判斷是否換行
                            if((start + i - 1) % 7 == 0){
                                     System.out.println();       
                            }
                   }
                   //換行
                   System.out.println();       
         }       
}
相關文章
相關標籤/搜索