Java里日期轉換及日期比較大小


1、比較日期的大小:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//創建日期轉換對象hh:mm:ss為時分秒,年月日為yyyy-MM-dd 
 Date dt1 = df.parse("2017-11-13 15:00:00");//將字符串轉換為date類型 
Date dt2 = df.parse("2017-11-13 17:00:00"); if(dt1.getTime()>dt2.getTime()){……}//比較時間大小:如果dt1大於dt2

  注意:字符串這里需要parse轉一下日期類型,否則沒有getTime()。

一種: DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); java.util.Date dateBegin=df.parse(ruleStatus.getExecuteTime()); java.util.Date dateEnd=df.parse(tempRuleStatus.getExecuteTime()); if(dateBegin.getTime() > dateEnd.getTime()){} 二種: DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String dateBegin=df.format(df.parse(ruleStatus.getExecuteTime())); String dateEnd=df.format(df.parse(tempRuleStatus.getExecuteTime())); if(Date.valueOf(dateBegin).getTime() > Date.valueOf(dateEnd).getTime()){}

注意:比較日期大小的時候需要注意12小時制和24小時制的區分(最好用24小時制)

//24小時制
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //12小時制
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
new Date("2017-11-15 11:34:14").getTime() //1510716854000

new Date("2017-11-15 12:08:12").getTime() //1510718892000

new Date("2017-11-15 00:08:12").getTime() //1510675692000

  如果是12小時制,那么"2017-11-15 12:08:12"是按"2017-11-15 00:08:12"計算getTime(),所以會比"2017-11-15 11:34:14"小,這點就容易引起問題,需要注意。

2、java String類型與Date日期類型互相轉換

  插入數據庫時,存入當前日期,當在界面展示時,出現進行轉換成指定的格式,如****年**月**日,或****/**/**等等這種格式。對於以上要求,需要進行數據格式化操作。

(1)Date格式轉化成String格式:

java.text.SimpleDateFormat   formatter   = new   SimpleDateFormat( "yyyy-MM-dd ");

String date = formatter.format(new Date());  //格式化數據,格式化的格式為:****-**-**,如2014-10-30.

(2)String格式的數據轉化成Date格式:

java.text.SimpleDateFormat   formatter   = new   SimpleDateFormat( "yyyy-MM-dd ");

String   s= "2011-07-09 "; 

Date  date   =   formatter.parse(s);

3、String轉換為Timestamp:

  兩種方式將String類型的數據轉換為Timestamp類型的數據

(1)使用Timestamp的valueOf()方法

String str = "2015-02-25 11:11:11"; Timestamp t = Timestamp.valueOf(str); 

(2)使用Timestamp的構造方法:"yyyy-MM-dd hh:mm:ss":12小時制;"yyyy-MM-dd HH:mm:ss":24小時制

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); try { Date date = sf.parse(str); System.out.println(date); Timestamp t1 = new Timestamp(date.getTime()); System.out.println(t1); } catch (ParseException e) { e.printStackTrace(); } 

4、解決數據庫中插入時間丟失時分秒問題:

  java.util.Date需要轉換為java.sql.Date,常規的方式轉換過來只可以得到年月日,如若要取得時分秒,可以用Date的子類Timestamp。

  Java在向數據庫中插入時間的時候,常常遇到時、分、秒丟失的情況,這種情況的發生一般是由於時間日期對象使用錯誤造成的。

  java.util.Date是不能直接插入數據庫中的,雖然它包含了日期和時分秒。java.sql.Date可以直接插入數據庫,但是它只有日期而沒有時間;java.sql.Time可以直接插入數據庫,但是它只有時間,沒有日期;以上這些往往不能滿足我們的需要。

  如果我們要插入日期和時間,那么就要相辦法來使用java.sql.Timestamp來向數據庫插入。java.sql.Timestamp可包含了日前和到毫秒的時間值,在程序中,我們常常是使用的java.util.Date,所以就要有解決的方法來實現。有如下方法將java.util.Date轉化為java.sql.Timestamp:

public java.sql.Timestamp getTimestamp(Date date) { return new java.sql.Timestamp(date.getTime()); }

  這樣,我們可以將我們使用的java.util.Date轉化,然后插入數據庫,便可以解決時、分、秒丟失的問題。
  由此可以看到我們向數據庫傳入或傳出值是盡量不要使用getDate方法或setDate方法,這樣會丟失數據,解決的辦法是:
  (1)改用java.sql.Timestamp 
  (2)傳日期形式的字符串,在存儲過程接收到后在存儲過程中使用to_date處理,對於輸出的使用to_char處理
  (3)傳TO_DATE字符串進存儲過程

  我這里做了對應三種方法的處理,請選用。

 


免責聲明!

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



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