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"));    //獲取東八區時間

  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");

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


  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();       
         }       
}

 


免責聲明!

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



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