簡體   English   中英

日期操作問題

[英]Problems with Date manipulation

我從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);

我得到的輸出有些奇怪,並且非常不一致。 以下是示例-日期-2011年8月23日星期二20:00:03 --- originalDate ---- 2011年8月23日2月23日太平洋夏令時間--dateParse ---- 2011-08 -24 08:30:03.000

在上面的輸出中,我對---- dateparse ---值感興趣,因為需要進行比較。 現在,如果您看到值在理想情況下有所變化,則兩個值應相同。

這里的問題是,如果輸出隨時區變化,那么我應該如何對從數據庫中獲取的數據中的代碼進行比較?

我只需要查看--dateparse--是否位於從數據庫獲取的日期范圍之間即可。 此代碼是否可以獨立於時區正常工作,或者此處存在一些問題。 如果日期是變化的,那么我的比較可能會出錯,或者上述兩個輸出是正確的方法。

您能告訴我如何解決此問題。

請參考類文檔並使用構造函數:

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

SimpleDateFormat(String pattern, Locale locale)

要檢查您的語言環境,請使用以下代碼:

Locale.getDefault()

也許這就是為什么您得到這些結果。

我只需要查看--dateparse--是否位於我從數據庫獲取的日期范圍之間即可。

假設:

  1. 從數據庫中檢索Date對象
  2. 時區信息以正在解析的文件格式嵌入

然后,所有Date實例都具有正確的絕對值(自1970年1月1日起,以毫秒為單位),因此可以正確比較。

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

barbosa所指出的,如果您在第二個日期格式中添加了時區,則會使用默認語言環境將其輸出。 例如,在我的PC上,它以英國當前時區英國夏令時顯示它。

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

輸出:

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

如果要強制使用日期格式的輸出時區,可以使用setTimeZone方法執行此操作:

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

輸出將變為:

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

就像Locale一樣,如果需要, TimeZone也具有getDefault方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM