2014-05-21 55 views
-3
Date date = //getting Date object of (record inserted datetime) using Hibernate query . 
DateTime currentDateTime = new DateTime(System.currentTimeMillis(), DateTimeZone.UTC); 
System.out.println("Current Date Time " + currentDateTime); 
DateTime utcDateTime = new DateTime(date, DateTimeZone.UTC); 
System.out.println("UTC Date Time :: " + utcDateTime); 
Period per = new Period(currentDateTime.toLocalDateTime(), utcDateTime.toLocalDateTime()); 
System.out.println("Period time in sec ::" + (float) per.toStandardSeconds().getSeconds()); 
System.out.println("Period time in minutes::" + (float) per.toStandardSeconds().getSeconds()/60); 
System.out.println("Period time in hours::" + (float) per.toStandardSeconds().getSeconds()/(60 * 60)); 

我在從MySQL DB中獲取數據時使用joda API和Hibernate。我在MySQL數據庫中存儲UTC時區的所有數據。現在我想要獲取當前時間和插入記錄之間的時間差。我的本地時區是格林威治標準時間+5:30。我時差(+5:30小時,實際差異)時差。不知道我在做什麼錯誤?

編輯:
我正在使用此代碼將數據存儲在數據庫中。使用joda API和UTC時區錯誤時差(分鐘/小時)

DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(format); 
DateTime dateTime = new DateTime(DateTimeZone.UTC); 
return dateTime.toString(dateTimeFormatter); 
+0

這個問題與喬達時間在這裏完全不清楚。 'date'的價值是什麼? (這是一個'java.sql.Date'或'java.util.Date'?)數據庫中記錄了什麼值?這並沒有幫助你沒有向我們展示任何涉及的值......並且不清楚你爲什麼要轉換到LocalDateTime。 –

+1

它是java.util.Date。查看更新的問題。 –

+1

我不知道你是如何從上面的評論到你的編輯... –

回答

0

你的問題很混亂,應該重寫。

由於DateTime默認情況下不需要調用currentTimeMillis。

無需調用toLocalDateTime。當您想要丟失時區時會使用該功能,但您已經處於UTC狀態,因此不需要應用時區,因此不需要刪除時區。

您正在用println行來計算sec,minutes,hours。 PeriodFormatterBuilder類執行此類工作。

您需要清楚java.util.Date和java.sql.Date。後者將時間部分設置爲零。都沒有時區。請注意與Java捆綁的第三種類型,java.sql.Timestamp

在調試併發布這類問題時,獲取返回Date和DateTime對象的毫秒數,以便獲得準確的數據。在我平常的工作中,我避免使用或思考毫秒,但爲了調試它可能是有用的。

正如Jon Skeet所說,您應該將日期 - 時間值作爲日期 - 時間類型存儲在數據庫中而不是字符串中。

我建議你搜索StackOverflow以獲取許多類似的問題,並提供示例代碼。

+0

你好@Basil,非常感謝你的回答以及這麼好的建議。但我真的不明白它是如何令人困惑。我沒有在數據庫中使用'VARCHAR' datetype,我正在使用'DATETIME'。我只是用'String'來存儲它。這會造成什麼問題嗎?除了我只是從DB存儲和檢索日期。它給了我錯誤的數據。怎麼樣?這是個問題。如果可能,請幫助我 –

+0

看到我的新問題,你可能會更清楚:http://stackoverflow.com/questions/23823671/how-to-avoid-my-local-timezone-while-fetching-date-from -db-使用-休眠 –