[Java]java.sql.Timestamp(時間戳)

java.sql.Timestamp(時間戳)

繼承父類:java.util.Date

所有已實現的接口:Serializable, Cloneable, Comparable<Date> 

主要構造方法:Timestamp(long millis) 使用毫秒時間值構造 Timestamp 對象。

Timestamp允許 JDBC API 將該類標識爲 SQL TIMESTAMP 值。它通過允許小數秒到納秒級精度的規範來添加保存 SQLTIMESTAMP 小數秒值的能力。

Timestamp 也提供支持時間戳值的 JDBC 轉義語法的格式化和解析操作的能力,主要用於寫一些與數據庫連接時的日期處理。

例如:

在 ResultSet中我們經常使用的setDate或getDate的數據類型是java.sql.Date,而在平時java程序中我們一般習慣使用 java.util.Date。

但是java.sql.Date 只存儲日期數據不存儲時間數據 ,這種符合規範的類型其實並沒有把時分秒存進數據庫,所以存取時就應該用Timestamp的setTimestamp()和

getTimestamp()。

整理一: String --> Timestamp: 

Timestamp轉換爲String可以直接.toString(),但有時候顯示時是不需要小數位後面的毫秒值,需要藉助DateFormat在轉換爲String時重新定義格式。

使用Timestamp的valueOf()方法, 

Timestamp time= new Timestamp(System.currentTimeMillis());//獲取系統當前時間 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStr = df.format(time); 
time = Timestamp.valueOf(timeStr); 
System.out.println(time);//2017-05-06 15:54:21.0 

整理二: java.util.Date --> Timestamp

方式1: 使用Timestamp的構造方法

Date date = new Date();
Timestamp ts = new Timestamp(date.getTime());

方式2:

注意:父類不能直接向子類轉化,需要藉助中間的String,並且format的格式要與Timestamp的字符串類型格式相匹配

java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

Date date = new Date();  
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
String dateStr = sdf.format(date);
Timestamp ts = Timestamp.valueOf(dateStr); //2017-05-06 15:54:21.0 

整理三:

通過構造方法創建Timestamp 對象,獲取毫秒值有下面三種方法:

方法1:

System.currentTimeMillis(); 

方法2:

Calendar.getInstance().getTimeInMillis(); 

方法3: 

new Date().getTime();

測試證明:System.currentTimeMillis() 這種方式速度最快

Calendar.getInstance().getTimeInMillis() 這種方式速度最慢,因爲Canlendar因爲要處理時區問題會耗費很多的時間。

所以建議多使用第一種方式。


注意:Greenwich Mean Time 格林尼治標準時間

.Net產生的時間都是當前時區的當前時間,而Java的currentTimeMillis()方法得到的卻是相對於GMT來的時間。

中國所在時區是+8區,故時間整整差了8小時!

 

方法摘要 
 boolean after(Timestamp ts) 
          指示此 Timestamp 對象是否晚於給定的 Timestamp 對象。 
 boolean before(Timestamp ts) 
          指示此 Timestamp 對象是否早於給定的 Timestamp 對象。 
 int compareTo(Date o) 
          將此 Timestamp 對象與給定的 Date(必須爲 Timestamp 對象)相比較。 
 int compareTo(Timestamp ts) 
          將此 Timestamp 對象與給定 Timestamp 對象相比較。 
 boolean equals(Object ts) 
          測試此對象是否等於給定的 Timestamp 對象。 
 boolean equals(Timestamp ts) 
          測試此 Timestamp 對象是否等於給定的 Timestamp 對象。 
 int getNanos() 
          獲取此 Timestamp 對象的 nanos 值。 
 long getTime() 
          返回此 Timestamp 對象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以來的毫秒數。 
 void setNanos(int n) 
          將此 Timestamp 對象的 nanos 字段設置爲給定值。 
 void setTime(long time) 
          設置此 Timestamp 對象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以後 time 毫秒的時間點。 
 String toString() 
          使用 JDBC 時間戳轉義格式編排時間戳。 
static Timestamp valueOf(String s) 
          將使用 JDBC 時間戳轉義格式的 String 對象轉換爲 Timestamp 值。 

實例代碼:

tLotteryAnnouncement.setDateTime(new Timestamp(System.currentTimeMillis()));
if(StringUtils.isNotBlank(tIsusesKj.getOpenTime())){
    tLotteryAnnouncement.setOpenTime(Timestamp.valueOf(tIsusesKj.getOpenTime()));
}else{
    tLotteryAnnouncement.setOpenTime(new Timestamp(tIsusesKj.getModifyDate().getTime()));
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章