javasqldate
1. java.sql.Date,java.sql.Time和java.sql.Timestamp什麼區別
【父類】java.util.Date日期格式為:年月日時分秒
【子類】java.sql.Date日期格式為:年月日[只存儲日期數據不存儲時間數據]
【子類】java.sql.Time日期格式為:時分秒
【子類】java.sql.Timestamp日期格式為:年月日時分秒納秒(毫微秒)
針對不同的資料庫選用不同的日期類型
·Oracle的Date類型,只需要年月日,選擇使用java.sql.Date類型
·MS Sqlserver資料庫的DateTime類型,需要年月日時分秒,選擇java.sql.Timestamp類型
------------------------------------------
四種對象內部均使用系統時間作為標准數據
·系統時間:自 1970 年 1 月 1 日 00:00:00 GMT 以來的毫秒數,即格林尼治標准時間GMT) ·本地時間:根據時區不同列印出來的時間[當時區為GMT+0時,系統時間與本地時間相同]我們使用的是以本地時間為參考標準的
//java.util.Date 轉換成 java.sql.Date 格式
try{
SimpleDateFormat DateFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
java.util.Date date1 = DateFormate.parse("2011-5-31 14:40:50");
java.sql.Date sqlDate = new java.sql.Date(date1.getTime());
System.out.println(DateFormate.format(sqlDate));
}catch (Exception ex) {
System.out.println(ex.getMessage());
}
//java.sql.Date 轉換成 java.util.Date 格式
java.sql.Date sqlDate1=java.sql.Date.valueOf("2005-12-12");
java.util.Date utilDate1=new java.util.Date(sqlDate1.getTime());
System.out.println("java.sql.Date 轉換成 java.util.Date 格式:"+f.format(utilDate1));
//java.util.Date轉換java.sql.Timestamp
new java.sql.Timestamp(new java.util.Date().getTime());//此處IDE報錯
//java.util.Date轉換java.sql.Time
new java.sql.Time(new java.util.Date().getTime());
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
我們可以使用DateFormat處理字元串來定義時間日期的格式
註:String都是先轉換為java.util.Date,然後再轉換成所需的格式
2. java中java.sql.Date
java.sql.Time 和 java.sql.Date 都沒有不接受任何參數的構造函數, 分別接收的是 Long型的 Time 和 Date .
比如!
Date date = new Date(System.currentTimeMillis());
System.out.println(date);
得到當前時間!
3. 為什麼有java.sql.date
java.util.Date 是 java.sql.Date 的父類;
java.util.Date 就是在除了SQL語句的情況下面使用,我們通常格式化或者得到當前時間都是用他。
java.sql.Date 是針對SQL語句使用的,一般在讀寫資料庫的時候用他,
因為PreparedStament的setDate()的第2參數和ResultSet的getDate()方法的第2個參數都是java.sql.Date
4. java中sql的date怎麼寫
java.sql.Date是針對SQL語句使用的,它只包含日期而沒有時間部分
java.util.Date是在除了SQL語句的情況下面使用的。
它們都有getTime方法返回毫秒數,自然就可以直接構建。 java.util.Date 是 java.sql.Date 的父類,前者是常用的表示時間的類,我們通常格式化或者得到當前時間都是用他,後者之後在讀寫資料庫的時候用他,因為PreparedStament的setDate()的第2參數和ResultSet的getDate()方法的第2個參數都是java.sql.Date。
java.sql.Date轉為java.util.Date
java.sql.Date date=new java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());
java.util.Date轉為java.sql.Date
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
java.sql.Time sTime=new java.sql.Time(utilDate.getTime());
java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());
這里所有時間日期都可以被SimpleDateFormat格式化format()
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
f.format(stp);
f.format(sTime);
f.format(sqlDate);
f.format(utilDate)
java.sql.Date sqlDate=java.sql.Date.valueOf(" 2005-12-12");
utilDate=new java.util.Date(sqlDate.getTime());
另類取得年月日的方法:
import java.text.SimpleDateFormat;
import java.util.*;
java.util.Date date = new java.util.Date();
//如果希望得到YYYYMMDD的格式SimpleDateFormat
sy1=new SimpleDateFormat("yyyyMMDD");
String dateFormat=sy1.format(date);
//如果希望分開得到年,月,日SimpleDateFormat
sy=new SimpleDateFormat("yyyy");
SimpleDateFormat sm=new SimpleDateFormat("MM");
SimpleDateFormat sd=new SimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date)
5. 如何正確比較日期 java.sql.Date
java.sql.Date比較:
import java.sql.Date;
例如今天是2010-12-2
Date d1 = new Date(System.currentTimeMili());
Date d2 = new Date(System.currentTimeMili()+1);//比d1晚1毫秒
日期上,我們認為d1和d2是相等的
但是
System.out.println(d1.before(d2));
輸出結果是true;
其實我們希望看到的是這兩個對象在日期上是相等的。
因為我們只關心「日期」,而「2010-12-2」不等於「2010-12-2」
這個結果顯然是我們所不能接受的。
究其原因,是因為Date內封裝了一個精確到毫秒的表示時間的
private transient long fastTime;
而before和after的函數的實現如下,都是判斷fastTime的值,所以達不到我們只比較日期的要求。
public boolean before(Date when) {
return getMillisOf(this) < getMillisOf(when);
}
public boolean after(Date when) {
return getMillisOf(this) > getMillisOf(when);
}
把日期格式成標準的「年月日」,然後對格式化後的對象進行比較,得到比較的結果
本文給出一種「格式成標准化」的方式
Date d1_temp = java.sql.Date.valueOf(d1.toString());
Date d2_temp = java.sql.Date.valueOf(d2.toString());
System.out.prinltn(d1_temp.equals(d2_temp));//輸出結果是true;
System.out.prinltn(d1_temp.before(d2_temp));//輸出結果是false;
System.out.prinltn(d1_temp.after(d2_temp));//輸出結果是false;
需要邏輯的話,可以寫成
if(d1_temp.before(d2_temp)){
.........
}
6. 如何在java程序中獲取java.sql.Date類型的當前系統時間
用System.currentTimeMillis()方法來實現 。
代碼如下:
java.sql.DatecurrentDate=newjava.sql.Date(System.currentTimeMillis());
說明:
返回long類型,一般用於獲取某個方法或其它的執行時間差,在開始前獲取一次,在結束時獲取一次,結束時間減去開始時間,得到執行時間。
7. java.util.Date和java.sql.Date的區別及應用
1) java.sql.Date是java.util.Date的子類,是一個包裝了毫秒值的瘦包裝器,允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。 為了與 SQL DATE 的定義一致,由 java.sql.Date 實例包裝的毫秒值必須通過將時間、分鍾、秒和毫秒設置為與該實例相關的特定時區中的零來「規范化」。 說白了,java.sql.Date就是與資料庫Date相對應的一個類型,而java.util.Date是純java的Date。
2)JAVA里提供的日期和時間類,java.sql.Date和java.sql.Time,只會從資料庫里讀取某部分值,這有時會導致丟失數據。例如一個包含2002/05/22 5:00:57 PM的欄位,讀取日期時得到的是2002/05/22,而讀取時間時得到的是5:00:57 PM. 你需要了解資料庫里存儲時間的精度。有些資料庫,比如MySQL,精度為毫秒,然而另一些資料庫,包括Oracle,存儲SQL DATE類型數據時,毫秒部分的數據是不保存的。以下操作中容易出現不易被發現的BUG:獲得一個JAVA里的日期對象。 從資料庫里讀取日期 試圖比較兩個日期對象是否相等。如果毫秒部分丟失,本來認為相等的兩個日期對象用Equals方法可能返回false。.sql.Timestamp類比java.util.Date類精確度要高。這個類包了一個getTime()方法,但是它不會返回額外精度部分的數據,因此必須使用...
總之,java.util.Date 就是Java的日期對象,而java.sql.Date 是針對SQL語句使用的,只包含日期而沒有時間部分。
8. JAVA怎麼給一個sql.Date賦值
java.sql.Date是針對SQL語句使用的,它只包含日期而沒有時間部分java.util.Date是在除了SQL語句的情況下面使用的。它們都有getTime方法返回毫秒數,自然就可以直接構建。java.util.Date是java.sql.Date的父類,前者是常用的表示時間的類,我們通常格式化或者得到當前時間都是用他,後者之後在讀寫資料庫的時候用他,因為PreparedStament的setDate()的第2參數和ResultSet的getDate()方法的第2個參數都是java.sql.Date。java.sql.Date轉為java.util.Datejava.sql.Datedate=newjava.sql.Date();java.util.Dated=newjava.util.Date(date.getTime());java.util.Date轉為java.sql.Datejava.util.DateutilDate=newDate();java.sql.DatesqlDate=newjava.sql.Date(utilDate.getTime());java.util.DateutilDate=newDate();java.sql.DatesqlDate=newjava.sql.Date(utilDate.getTime());java.sql.TimesTime=newjava.sql.Time(utilDate.getTime());java.sql.Timestampstp=newjava.sql.Timestamp(utilDate.getTime());這里所有時間日期都可以被SimpleDateFormat格式化format()SimpleDateFormatf=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");f.format(stp);f.format(sTime);f.format(sqlDate);f.format(utilDate)java.sql.DatesqlDate=java.sql.Date.valueOf("2005-12-12");utilDate=newjava.util.Date(sqlDate.getTime());另類取得年月日的方法:importjava.text.SimpleDateFormat;importjava.util.*;java.util.Datedate=newjava.util.Date();//如果希望得到YYYYMMDD的格式SimpleDateFormatsy1=newSimpleDateFormat("yyyyMMDD");StringdateFormat=sy1.format(date);//如果希望分開得到年,月,日SimpleDateFormatsy=newSimpleDateFormat("yyyy");SimpleDateFormatsm=newSimpleDateFormat("MM");SimpleDateFormatsd=newSimpleDateFormat("dd");Stringsyear=sy.format(date);Stringsmon=sm.format(date);Stringsday=sd.format(date)
9. 如何取java.sql.Date中的年,月,日
java.sql.Datesdate=newjava.sql.Date(System.currentTimeMillis());
//方法一(不建議使用)
System.out.println("Year:"+sdate.getYear());
System.out.println("Month:"+sdate.getMonth());
System.out.println("Date:"+sdate.getDate());
//方法二
java.text.SimpleDateFormatsformat=newjava.text.SimpleDateFormat();
sformat.applyPattern("yyyy");
System.out.println("Year:"+sformat.format(sdate));
sformat.applyPattern("MM");
System.out.println("Month:"+sformat.format(sdate));
sformat.applyPattern("dd");
System.out.println("Date:"+sformat.format(sdate));