MiniQuark सामान्य रूप में डेटाबेस के लिए कुछ अच्छा जवाब दे दिया है, लेकिन वहाँ पर विचार करने के कुछ MySql विशिष्ट quirks ...
UTC समयज़ोन उपयोग करने के लिए
अपने डेटाबेस को कॉन्फ़िगर कर रहे हैं यही कारण है कि वास्तव में नहीं होगा समस्या को ठीक करने के लिए पर्याप्त हो। यदि आप java.util.Date को MySQL पर भेजते हैं, ओपी पूछ रहा था, तो MySQL ड्राइवर डेटाबेस 0 के समय क्षेत्र में उसी स्थानीय समय की तरह दिखने के लिए मान को बदल देगा।
उदाहरण: यूटीसी में कॉन्फ़िगर किया गया आपका डेटाबेस। आपका आवेदन ईएसटी है। आप 5:00 (ईएसटी) के लिए java.util.Date ऑब्जेक्ट पास करते हैं। डेटाबेस इसे 5:00 यूटीसी में परिवर्तित करेगा और इसे स्टोर करेगा। बहुत बढ़िया।
इस स्वचालित समायोजन को "पूर्ववत करने" के लिए डेटा को पास करने से पहले आपको समय समायोजित करना होगा। कुछ की तरह ...
long originalTime = originalDate.getTime();
Date newDate = new Date(originalTime - TimeZone.getDefault().getOffset(originalTime));
ps.setDate(1, newDate);
डेटा वापस बाहर पढ़ना एक ऐसी ही रूपांतरण ..
long dbTime = rs.getTimestamp(1).getTime();
Date originalDate = new Date(dbTime + TimeZone.getDefault().getOffset(dbTime));
यहाँ एक और मजेदार मोड़ है ...
जावा में, जब से पढ़ने की आवश्यकता है डेटाबेस, हमेशा उपयोग करें: टाइमस्टैम्प myDate = resultSet.getTimestamp ("my_date", calendar.getInstance (TimeZone.getTimeZone ("UTC"));
MySQL वास्तव में उस कैलेंडर पैरामीटर को अनदेखा करता है। यह वही मूल्य देता है चाहे आप इसे किस कैलेंडर को पास करते हैं।
स्रोत
2012-11-15 19:58:14
क्या आप हाइबरनेट का उपयोग कर रहे हैं या डेटाबेस के इंटरफ़ेस के समान हैं? –