2011-05-23 76 views
3

我有一個表格,其數據類型爲DATETIME。我堅持在這個表中使用Java記錄,我計算當前日期如下。UTC中的日期在mysql中

Date date = Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime(); 

但是當我檢查我的表時,它再次將此時間轉換爲本地時區。

有人可以向我解釋一下,如何在UTC時區存儲數據庫中的日期。

@code

我有一個分貝實體「推薦」對應於與日期構件數據類型作爲java.util.Date表,並使用休眠保存它。

Referral ref = new Referral(); 
ref.setCreationDate(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTime()); 
referralDAO.save(ref); 

由於

Jitendra

+0

向我們展示檢索和解釋DATETIME的代碼,這可能是事情出錯的地方。 – jwd 2011-05-23 16:02:51

+0

數據庫連接屬性是否與它有關? – RandomQuestion 2011-05-23 16:12:28

+0

添加有問題的代碼。 – RandomQuestion 2011-05-23 16:13:31

回答

2

的MySQL DATETIME存儲在一個時區不可知方式。它只是存儲年/月/日/小時/分鐘/秒

你如何解釋這些信息取決於你和你的應用程序。 如果您將其存儲爲UTC,那麼當您檢索它時,必須確保將其解釋爲UTC。

您可能會感興趣這太問題:How can I get the current date and time in UTC or GMT in Java?

正如答覆中提到這個問題:

java.util.Date是總是UTC。 是什麼讓你覺得它在當地 時間?我懷疑問題是您通過日曆的實例 顯示它,該日曆使用本地時區 或可能使用的 Date.toString(),它也使用本地時區 。

+0

我正在嘗試以UTC格式存儲它,但它正在存儲在本地時區中。 – RandomQuestion 2011-05-23 16:15:03

+0

查看@Dilum Ranatunga的評論 - 你是否確信它沒有存儲在UTC中,還是隻是演示文稿?嘗試從mysql的命令行界面中做一個SELECT,刪除所有層次的重新解釋 – jwd 2011-05-23 16:24:48

+0

我正在使用命令行mysql來查看記錄。 – RandomQuestion 2011-05-23 18:46:19

2

Java中的日期只是很長。它不受任何時區的限制。當您通過JDBC驅動程序將日期/時間戳傳遞到數據庫時,會將它解釋爲會話時區中的時間,該時區是您的JVM時區。

某些數據庫(如Oracle和PostgreSQL)的數據類型爲TIMESTAMP WITH TIMEZONE。我不相信MySQL有它。您可以將JVM時區切換爲UTC或使用字符串字段並使用SimpleDateFormat格式化Date。