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



sql calendar (1)

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

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());

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

चियर्स


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

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

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

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

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

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

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





timestamp