這兩週時間的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();
}
}