प्रश्न नहीं होना चाहिए यदि FILETIME
में लीप सेकंड शामिल हैं।
यह होना चाहिए:
लोगों को, काम करता है, और पुस्तकालयों, जो व्याख्या करते हैं एक FILETIME
(अर्थात FileTimeToSystemTime
) जब अवधि गिनती छलांग सेकंड में शामिल हैं?
सरल उत्तर "नहीं" है। FileTimeToSystemTime
0..59
के रूप में सेकंड देता है।
सरल जवाब है: "निश्चित रूप से नहीं, यह कैसे कर सकते थे?"।
मेरी विंडोज 2000 मशीन यह नहीं जानती कि इसे जारी होने के बाद दशक में 2 लीप सेकेंड जोड़े गए थे। FILETIME
की कोई भी व्याख्या गलत है।
अंत में, बल्कि तर्क पर भरोसा करने की बजाय, हम प्रत्यक्ष प्रयोगात्मक अवलोकन द्वारा निर्धारित कर सकते हैं, पोस्टर का जवाब सवाल:
var
systemTime: TSystemTime;
fileTime: TFileTime;
begin
//Construct a system-time for the 12/31/2008 11:59:59 pm
ZeroMemory(@systemTime, SizeOf(systemTime));
systemtime.wYear := 2008;
systemTime.wMonth := 12;
systemTime.wDay := 31;
systemTime.wHour := 23;
systemtime.wMinute := 59;
systemtime.wSecond := 59;
//Convert it to a file time
SystemTimeToFileTime(systemTime, {var}fileTime);
//There was a leap second 12/31/2008 11:59:60 pm
//Add one second to our filetime to reach the leap second
filetime.dwLowDateTime := fileTime.dwLowDateTime+10000000; //10,000,000 * 100ns = 1s
//Convert the filetime, sitting on a leap second, to a displayable system time
FileTimeToSystemTime(fileTime, {var}systemTime);
//And now print the system time
ShowMessage(DateTimeToStr(SystemTimeToDateTime(systemTime)));
करने के लिए एक दूसरे को जोड़ने
12/31/2008 11:59:59pm
देता है
1/1/2009 12:00:00am
1/1/2009 11:59:60pm
Q.E.D. के बजाय
मूल पोस्टर इसे पसंद नहीं कर सकता है, लेकिन भगवान जानबूझकर इसे खराब कर देते हैं ताकि एक दिन एक वर्ष तक समान रूप से विभाजित न हो। उन्होंने प्रोग्रामर को खराब करने के लिए इसे किया।
स्रोत
2010-08-30 18:10:49
के लिए +1 आपके विंडोज 2000 सर्वर * एनपीटी सर्वर का उपभोग करते हैं और उनकी प्रतिक्रिया में एलआई फ़ील्ड का ट्रैक रखता है, तो इसे रिलीज़ होने के बाद से लीप सेकेंड जोड़ा जा सकता है। – Pacerier
@Pacerier दुर्भाग्य से केवल ओएस को बताता है कि दिन के अंत में एक छलांग दूसरा डाला जाएगा। दुर्भाग्यवश एनटीपी सर्वर एनटीपी का आविष्कार होने के बाद से पीछे हटने वाले सभी लीप-सेकंड की एक सूची की रिपोर्ट नहीं करता है; या मेरे ओएस को स्थापित करने से पहले, या किसी भी दिन मेरा सर्वर बंद होने से पहले मुझे सभी लीप सेकंड याद आए। –
मैं यह नहीं कह रहा था कि एनटीपी सभी लीप सेकंड की एक सूची रिपोर्ट करता है जो हुआ। आपके विंडोज 2000 सर्वर को रिलीज होने के बाद जोड़ा गया लीप सेकंड पता हो सकता है यदि ** ** ** एक एनटीपी सर्वर ** का उपभोग करता है और ** उनकी प्रतिक्रिया में एलआई फ़ील्ड का ट्रैक रखता है। ओएस एनटीपी सर्वर द्वारा प्रदान किए गए क्षेत्र को पढ़ता है, और यह * ट्रैकिंग * करता है, शायद इसे सिस्टम में सहेजकर आदि। जाहिर है, ओएस बहुत कुछ कर सकता है, उदाहरणों में माइक्रोसॉफ्ट से एक बार ऑनलाइन वेब सेवा से परामर्श करना शामिल है यह सुनिश्चित करने के लिए कुछ समय है कि इसके रिकॉर्ड टेम्पर्ड नहीं हैं ... – Pacerier