2012-09-25 44 views
0

我從Oracle數據庫的開始日期和結束日期獲取2個時間戳。他們來這種格式yyyy-MM-dd HH:mm:ss.SSS處理日期的問題

現在我從文本文件獲取另一個時間戳比較。它是字符串格式。以下是我編寫的用於提取所需信息的代碼。

DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy"); 
    Date date = f.parse("Tue Aug 23 20:00:03 PDT 2011"); 
    System.out.println("---date----" + f.format(date)); 
    String originalDate = f.format(date); 
    System.out.println("---originalDate----" + originalDate); 

    DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
    String dateParse = f2.format(date); 
    System.out.println("---dateParse----"+dateParse); 

我得到的輸出有點奇怪,而且非常不一致。以下是樣品 ---日期---- 8月23日星期二20:00:03 PDT 2011 --- originalDate ---- 8月23日星期二20:00:03 PDT 2011 --- dateParse ---- 2011-08-24 08:30:03.000

在上面的輸出中我對---- dateparse --- value感興趣,因爲我需要這個比較。 現在,如果您看到值在理想情況下變化,兩者應該是相同的值。

這裏的問題是,如果輸出隨時區而變化,那麼我該如何在代碼中對來自數據庫的數據進行比較?

我只需要看看--dateparse--位於從db獲取的日期範圍之間。 此代碼是否可以正常工作,與時區無關或者此處存在問題。 如果日期不同,那麼我的比較可能會出錯,或者是上述2個輸出的正確方法。

你能告訴我如何解決這個問題。

+1

數據庫中數據的時區是什麼? (它真的*在文本字段中?您不需要解析數據庫中的數據...) –

+0

我同意@Jon。您不必從數據庫中解析日期爲字符串。它應該像java.util.Date一樣來... – gdfbarbosa

回答

0

我只需要看看是否--dateparse--位於我從db獲取的日期範圍之間。

假設:

  1. Date對象從數據庫
  2. 時區信息被嵌入在文件格式解析

檢索。然後Date所有實例都具有適當的絕對值(從1970年1月1日開始計算毫秒數),從而正確比較。

那麼你應該注意什麼?沒有Timezone或Locale信息的日期/時間字符串。如果您要解析其中的一個,則將使用您的區域設置和時區,這可能與寫入數據的時間/位置不同。在這種情況下,檢索到的Date可能會引用錯誤的絕對時間。

0

如果添加一個時區到你的第二個日期格式,你會發現它使用它默認的語言環境,爲barbosa指出輸出。例如,在我的電腦上,它顯示英國夏令時,英國目前的時區。

DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS zz"); 
System.out.println("---dateParse----" + f2.format(date)); 

輸出:

f2.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 

輸出則變爲:

---dateParse----2011-08-24 04:00:03.000 BST 

如果要生效的日期格式的輸出時間區域,您可以在此使用setTimeZone方法做:

---dateParse----2011-08-23 20:00:03.000 PDT 

就像LocaleTimeZone有一個getDefault方法,如果有必要。