java - विचित्र जावा एसक्यूएल टाइमस्टैम्प कैलेंडर पुनर्प्राप्ति व्यवहार-कैलेंडर से मिलीसेकेंड लगते हैं?




sql calendar timestamp (2)

यह कोड स्निपेट:

private Date fetchTimestampFromDatabase(SqlRowSet rs, String field) {

try {

  System.out.println(rs.getTimestamp(field));
  for (int i = 0; i < 10; i++) {
    System.out.println(rs.getTimestamp(field, Calendar.getInstance(TimeZone.getTimeZone("UTC"))));
    Thread.sleep(200);
    ...

निम्न परिणाम देता है:

2014-06-06 10:44:58.696
2014-06-06 12:44:58.75
2014-06-06 12:44:58.95
2014-06-06 12:44:58.15
2014-06-06 12:44:58.35
2014-06-06 12:44:58.55
2014-06-06 12:44:58.75
2014-06-06 12:44:58.95
2014-06-06 12:44:58.15
2014-06-06 12:44:58.35
2014-06-06 12:44:58.55

महान, समयक्षेत्र ऑफसेट ठीक से लागू किया गया है, लेकिन धरती पर क्यों मिलिसेकंड जाली जा रहा है, संभवतः कैलेंडर इंस्टेंस से लिया गया है?

विधि के javadoc पढ़ना, मुझे लगता है कि यह स्पष्ट करने के लिए लगता है कि एक बल्कि अस्पष्ट बयान पाया गया है के रूप में व्यवहार:

"यह विधि टाइमस्टैम्प के लिए उपयुक्त मिलिसेकंड मान बनाने के लिए दिए गए कैलेंडर का उपयोग करता है"

स्रोत फ़ाइल की रेखा 6180 यह पुष्टि करता है:

cal.set(Calendar.YEAR, defaultCal.get(Calendar.YEAR));
cal.set(Calendar.MONTH, defaultCal.get(Calendar.MONTH));
cal.set(Calendar.DAY_OF_MONTH, defaultCal.get(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, defaultCal.get(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, defaultCal.get(Calendar.MINUTE));
cal.set(Calendar.SECOND, defaultCal.get(Calendar.SECOND));
return new java.sql.Timestamp(cal.getTime().getTime());

क्या किसी को पता है कि कैलेंडर क्यों नहीं।

चियर्स


Answers

प्रलेखन इंगित करने के लिए लगता है कि कैलेंडर में मिलीसेकंड मान प्रदान की जाने की उम्मीद है। हालांकि, यह ResultSet के दस्तावेज़ीकरण से कुछ अलग है (जिसमें से रोटसेट फैली हुई है)।

टाइमस्टैम्प के लिए उपयुक्त मिलिसेकंड मान तैयार करने के लिए यह विधि दी गई कैलेंडर का उपयोग करती है अगर अंतर्निहित डेटाबेस समयक्षेत्र की जानकारी संग्रहीत नहीं करता है।

यह 2 प्रतीत होता है असंबंधित अवधारणाओं को एक साथ टाई करने लगता है - डाटाबेस में टाइमज़ोन की जानकारी और डेटाबेस में टाइमस्टैम्प फ़ील्ड की सटीकता की उपस्थिति।

स्रोत कोड की समस्या वास्तव में कैलेंडर जनसंख्या से ठीक पहले शुरू होती है:

   defaultCal.setTime((java.util.Date)value);

एक टाइमटाइम को एक java.util.Date पर कास्टिंग करके, सभी आंशिक द्वितीय डेटा खो गया था। जैसा टाइमस्टैम्प जवाडॉक में वर्णित है:

नोट: यह प्रकार एक java.util.Date और एक अलग नैनोसेकंड मूल्य का एक समग्र है। केवल अभिन्न सेकंड java.util.Date घटक में संग्रहीत किए जाते हैं


अपना reference अधिक ध्यान से पढ़ें:

डिफ़ॉल्ट मान

फ़ील्ड घोषित होने पर मूल्य आवंटित करना हमेशा आवश्यक नहीं होता है। जिन क्षेत्रों को घोषित किया गया है लेकिन आरंभ नहीं किया गया है उन्हें संकलक द्वारा उचित डिफ़ॉल्ट पर सेट किया जाएगा। आम तौर पर, डेटा प्रकार के आधार पर यह डिफ़ॉल्ट शून्य या शून्य होगा। हालांकि, ऐसे डिफ़ॉल्ट मानों पर निर्भर करते हुए, आमतौर पर खराब प्रोग्रामिंग शैली माना जाता है।

निम्न चार्ट उपर्युक्त डेटा प्रकारों के लिए डिफ़ॉल्ट मानों का सारांश देता है।

। । ।

स्थानीय चर थोड़ा अलग हैं; संकलक कभी एक अनियमित स्थानीय चर के लिए डिफ़ॉल्ट मान निर्दिष्ट नहीं करता है। यदि आप अपने स्थानीय चर को प्रारंभ नहीं कर सकते हैं जहां इसे घोषित किया गया है, तो इसे उपयोग करने का प्रयास करने से पहले इसे एक मान असाइन करना सुनिश्चित करें। एक अनियमित स्थानीय चर का उपयोग करने के परिणामस्वरूप संकलन-समय त्रुटि होगी।





java sql calendar timestamp