各種時間型別的轉換及比較
我們常用的時間型別不外乎 Date型別,但是想要獲取更精準的時間,則需要DateTime或者Timestamp型別。
下面先簡單說一下這三種型別的格式及時間範圍:
1.Date: 年/月/日 時間範圍:公元100年1月1日 0:00:00 ~ 9999年12月31日 23:59:59)
Fri Jul 21 15:33:05 CST 2017(獲得date) 2017-33-21 15:07:05 (格式化後)
MySQL用'YYYY-MM-DD'格式檢索和顯示DATE值
2.Datetime: MySQL檢索並且以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值,支援的範圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
一些符號標識:
3.Timestamp:時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數
預設值:0000-00-00-00.00.00.000000 格式:yyyy-MM-dd HH:mm:ss.fff
4.TIME資料型別表示一天中的時間。MySQL檢索並且以"HH:MM:SS"格式顯示TIME值。支援的範圍是'00:00:00'到'23:59:59'。
- y : 年
- M : 月
- d:日
- h或H:小時
- m:分鐘
- s:秒
- t:12小時制的上下午(AM/PM)
- z:時區
下面是這幾種型別的相互轉換:
一、String與Date(java.util.Date)互轉
1.1 String -> Date
- String dateStr = "2010/05/04 12:34:23";
- Date date = new Date();
- //注意format的格式要與日期String的格式相匹配
- DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- try {
- date = sdf.parse(dateStr);
- System.out.println(date.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
1.2 Date -> String
日期向字串轉換,可以設定任意的轉換格式format
- String dateStr = "";
- Date date = new Date();
- //format的格式可以任意
- DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss");
- try {
- dateStr = sdf.format(date);
- System.out.println(dateStr);
- dateStr = sdf2.format(date);
- System.out.println(dateStr);
- } catch (Exception e) {
- e.printStackTrace();
- }
二、String與Timestamp互轉
(Timestamp的值從資料庫取出展示在前臺有可能是一串數字,此時需要轉換為String型別即可以正常顯示)
2.1 String ->Timestamp
使用Timestamp的valueOf()方法
- Timestamp ts = new Timestamp(System.currentTimeMillis());
- String tsStr = "2011-05-09 11:49:45";
- try {
- ts = Timestamp.valueOf(tsStr);
- System.out.println(ts);
- } catch (Exception e) {
- e.printStackTrace();
- }
注:String的型別必須形如: yyyy-mm-dd hh:mm:ss[.f...] 這樣的格式,中括號表示可選,否則報錯!!!
如果String為其他格式,可考慮重新解析下字串,再重組~~
2.2 Timestamp -> String
使用Timestamp的toString()方法或者借用DateFormat
- Timestamp ts = new Timestamp(System.currentTimeMillis());
- String tsStr = "";
- DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- try {
- //方法一
- tsStr = sdf.format(ts);
- System.out.println(tsStr);
- //方法二
- tsStr = ts.toString();
- System.out.println(tsStr);
- } catch (Exception e) {
- e.printStackTrace();
- }
很容易能夠看出來,方法一的優勢在於可以靈活的設定字串的形式。
三、Date( java.util.Date )和Timestamp互轉
宣告:查API可知,Date和Timesta是父子類關係
3.1 Timestamp -> Date
- Timestamp ts = new Timestamp(System.currentTimeMillis());
- Date date = new Date();
- try {
- date = ts;
- System.out.println(date);
- } catch (Exception e) {
- e.printStackTrace();
- }
很簡單,但是此刻date物件指向的實體卻是一個Timestamp,即date擁有Date類的方法,但被覆蓋的方法的執行實體在Timestamp中。
3.2 Date -> Timestamp
父類不能直接向子類轉化,可藉助中間的String~~~~
java.sql.Date 只儲存日期資料不儲存時間資料
// 會丟失時間資料
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
//可以這樣來處理
preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));
//想要得到完整的資料,包括日期和時間,可以這樣
java.util.Date d = resultSet.getTimestamp(1);
//這樣處理更合適一些,可以避免一些潛在Timestamp 問題
java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());
自己補的話
這樣的話:
往資料庫儲存的時候可以接收 java.util.Date型別 再用getTime()方法得到代表那個Date物件的long值,再以這個long值 構造一個Timestamp物件 存進資料庫中。
從存資料庫裡取的時候,可以先得到Timestamp用他的getTime()方法得到long值,再以這個long值構造一個java.util.Date物件,這樣就可以對這個Date物件操作了。不如說 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等
二:時間型別之間的大小比較
1.Date型別(compareTo方法)
含義:實際上比較的是自1970 年 1 月 1 日 00:00:00 GMT以來的毫秒數。毫秒數越大的時間越大
引數 Date 等於此 Date,則返回值 0;如果此
Date 在 Date 引數之前,則返回小於 0 的值;如果此 Date 在 Date 引數之後,則返回大於 0 的值
2.Timestamp型別(getTime()方法)
2個timestamp型別的資料不能直接用><=比較大小
可以用下面的方法比較
- var timestamp1;
- var timestamp2;
- if( timestamp1.getTime() > timestamp2.getTime())
註釋: 1. java.util.Date類中的getYear()要加上1900才可得到實際值,getMonth()則要加上1。
2. 字元串到Date的轉換:
Date.valueOf(str),記得引包的時候要引sql的Date包,不是util的Date包
3. 字串到Timestamp 的轉換Timestamp ts = Timestamp.valueOf(time);
相關文章
- js中各個型別之間的比較JS型別
- python時間戳和時間字串的各種轉換Python時間戳字串
- 字元型別轉換成時間型別字元型別
- java日期時間各種變換及處理Java
- 時間型別及格式轉換型別
- 強制型別轉換時的異常處理_java與c++比較型別JavaC++
- JS嵌入html的方式及各種方式的比較JSHTML
- java計算時間差及比較時間Java
- java計算時間差及比較時間大小Java
- Oracle三種集合資料型別的比較Oracle資料型別
- Selenium各種工具比較
- 【JS 口袋書】第 7 章:JS 中的型別轉換與比較JS型別
- Javascripit型別轉換比較那點事兒,雙等號(==)Java型別
- MySQL把字串欄位轉換為日期型別進行比較MySql字串型別
- Java資料型別及型別轉換Java資料型別
- 直播軟體搭建,當前時間、既定時間後的時間及時間比較大小
- Oracle的 資料型別比較及注意事項Oracle資料型別
- UIModalPresentationStyle 各種型別的區別UI型別
- 各種無線接入系統比較分析的準則(轉)
- 資料型別及轉換資料型別
- python 各種時間格式轉化Python
- C#中各種Lock的速度比較C#
- python中sys,os,time模組的使用(包括時間格式的各種轉換)Python
- php型別比較表PHP型別
- Java Integer型別比較Java型別
- jquery比較時間 的時分秒大小jQuery
- Oracle date 型別比較和String比較Oracle型別
- sqlserver 時間型別 轉化SQLServer型別
- (轉)PLS_INTEGER型別與timestamp型別、date、及時間函式型別函式
- js資料型別間的互相轉換JS資料型別
- Java 資料型別之間的轉換Java資料型別
- 字串和Date型別之間的轉換字串型別
- JavaScript 比較時間大小JavaScript
- java double、float型別的比較Java型別
- C與I型別的比較型別
- C++基本資料型別及型別轉換C++資料型別
- Tweetolife:Twitter上的性別和時間比較分析
- 各種失敗型別型別