[英]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--是否位於我從數據庫獲取的日期范圍之間即可。
假設:
Date
對象 然后,所有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.