2008-09-24 16 views
15

FILETIME http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx संरचना 1 जनवरी 1601 से संभवतः (उस दिन की शुरुआत) माइक्रोसॉफ्ट दस्तावेज के अनुसार, लेकिन इसमें लीप सेकंड शामिल हैं?क्या विंडोज़ FILETIME संरचना में लीप सेकेंड शामिल हैं?

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

उत्तर

13

प्रश्न नहीं होना चाहिए यदि FILETIME में लीप सेकंड शामिल हैं।

यह होना चाहिए:

लोगों को, काम करता है, और पुस्तकालयों, जो व्याख्या करते हैं एक FILETIME (अर्थात FileTimeToSystemTime) जब अवधि गिनती छलांग सेकंड में शामिल हैं?

सरल उत्तर "नहीं" है। FileTimeToSystemTime0..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. के बजाय

मूल पोस्टर इसे पसंद नहीं कर सकता है, लेकिन भगवान जानबूझकर इसे खराब कर देते हैं ताकि एक दिन एक वर्ष तक समान रूप से विभाजित न हो। उन्होंने प्रोग्रामर को खराब करने के लिए इसे किया।

+0

के लिए +1 आपके विंडोज 2000 सर्वर * एनपीटी सर्वर का उपभोग करते हैं और उनकी प्रतिक्रिया में एलआई फ़ील्ड का ट्रैक रखता है, तो इसे रिलीज़ होने के बाद से लीप सेकेंड जोड़ा जा सकता है। – Pacerier

+0

@Pacerier दुर्भाग्य से केवल ओएस को बताता है कि दिन के अंत में एक छलांग दूसरा डाला जाएगा। दुर्भाग्यवश एनटीपी सर्वर एनटीपी का आविष्कार होने के बाद से पीछे हटने वाले सभी लीप-सेकंड की एक सूची की रिपोर्ट नहीं करता है; या मेरे ओएस को स्थापित करने से पहले, या किसी भी दिन मेरा सर्वर बंद होने से पहले मुझे सभी लीप सेकंड याद आए। –

+0

मैं यह नहीं कह रहा था कि एनटीपी सभी लीप सेकंड की एक सूची रिपोर्ट करता है जो हुआ। आपके विंडोज 2000 सर्वर को रिलीज होने के बाद जोड़ा गया लीप सेकंड पता हो सकता है यदि ** ** ** एक एनटीपी सर्वर ** का उपभोग करता है और ** उनकी प्रतिक्रिया में एलआई फ़ील्ड का ट्रैक रखता है। ओएस एनटीपी सर्वर द्वारा प्रदान किए गए क्षेत्र को पढ़ता है, और यह * ट्रैकिंग * करता है, शायद इसे सिस्टम में सहेजकर आदि। जाहिर है, ओएस बहुत कुछ कर सकता है, उदाहरणों में माइक्रोसॉफ्ट से एक बार ऑनलाइन वेब सेवा से परामर्श करना शामिल है यह सुनिश्चित करने के लिए कुछ समय है कि इसके रिकॉर्ड टेम्पर्ड नहीं हैं ... – Pacerier

0

एक बहुत ही कच्चे तेल की सारांश:

यूटीसी = (परमाणु समय) + (लीप सेकंड) ~~ (माध्य सौर समय)

एमएस प्रलेखन कहते हैं, विशेष रूप से, "यूटीसी", और इसी को शामिल करना चाहिए छलांग सेकंड। एमएस के साथ हमेशा के रूप में, आपका लाभ भिन्न हो सकता है।

2

लीप सेकंड IERS द्वारा अप्रत्याशित रूप से जोड़े गए हैं। 23 सेकंड के बाद से 23 सेकंड जोड़े गए हैं, जब यूटीसी और लीप सेकंड परिभाषित किए गए थे। विकिपीडिया कहता है "क्योंकि पृथ्वी की घूर्णन दर लंबी अवधि में अप्रत्याशित है, इसलिए छह महीने से अधिक समय की आवश्यकता की भविष्यवाणी करना संभव नहीं है।"

चूंकि आपको लीप सेकेंड डालने के बाद इतिहास रखना होगा, और ओएस को अद्यतन करने के संदर्भ में रखना जारी रखना होगा, और अंतर इतना छोटा है, यह उचित है कि सामान्य - लीप सेकंड की क्षतिपूर्ति करने के लिए ओएस को रोकें।

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

0

इस comment विंडोज़ के अनुसार पूरी तरह से छलांग के सेकंड से अनजान है। यदि आप FILETIME में 24 * 60 * 60 सेकेंड जोड़ते हैं जो आज 1:39:45 का प्रतिनिधित्व करता है, तो आपको एक FILETIME मिलती है जो कल 1:39:45 का प्रतिनिधित्व करती है, इससे कोई फर्क नहीं पड़ता।

7

Here इस बारे में कुछ और जानकारी क्यों दी गई है कि उस विशेष तिथि को क्यों चुना गया था।

में FILETIME संरचना रिकॉर्ड समय 1 जनवरी 1601. के बाद से 100-nanosecond अंतराल के रूप क्यों कि तारीख में चुना गया था?

ग्रेगोरियन कैलेंडर एक 400 साल चक्र पर काम करती है, और 1601 चक्र कि पर समय Windows NT डिजाइन किया जा रहा था सक्रिय था की पहली वर्ष है। दूसरे शब्दों में, यह था जिसे गणित अच्छी तरह से बाहर निकालने के लिए चुना गया था।

मेरे पास वास्तव में डेव कटलर से ईमेल की पुष्टि है।

+0

रेमंड चेन लिंक –

8

पहले बिना निर्णय किए इस प्रश्न का कोई भी जवाब नहीं हो सकता है: विंडोज फ़ाइल वास्तव में क्या गिनती है? माइक्रोसॉफ्ट डॉक्स का कहना है कि यह 1601 यूटीसी के बाद 100 नैनोसेकंद अंतराल की गणना करता है, लेकिन यह समस्याग्रस्त है।

1 9 60 से पहले अंतरराष्ट्रीय स्तर पर समन्वित समय का कोई भी रूप अस्तित्व में नहीं था। यूटीसी नाम 1 9 64 से पहले किसी भी साहित्य में नहीं होता है।एक आधिकारिक पदनाम के रूप में यूटीसी नाम 1 9 70 तक अस्तित्व में नहीं था। लेकिन यह बदतर हो जाता है। रॉयल ग्रीनविच वेधशाला 1676 तक स्थापित नहीं की गई थी, इसलिए FILETIME की व्याख्या करने की भी कोशिश कर रहा है क्योंकि जीएमटी का कोई स्पष्ट अर्थ नहीं है, और यह केवल तब ही था जब सटीक बचपन के साथ पेंडुलम घड़ियों को 1 सेकंड की परेशानी देना शुरू हो गया।

यदि FILETIME को सौर सेकंड के रूप में व्याख्या किया गया है तो 1601 के बाद से लीप सेकंड की संख्या शून्य है, यूटी के पास कोई छलांग नहीं है। अगर FILETIME का अर्थ यह है कि परमाणु क्रोनोमीटर थे तो 1601 के बाद से लीप सेकंड की संख्या लगभग -60 (यह नकारात्मक 60 लीप सेकंड है)।

यह प्राचीन इतिहास है, परमाणु क्रोनोमीटर के बाद युग के बारे में क्या? यह बेहतर नहीं है क्योंकि राष्ट्रीय सरकारों ने औसत सौर सेकंड और एसआई सेकंड के बीच अंतर नहीं बनाया है। एक दशक के लिए आईटीयू-आर लीप सेकंड छोड़ने पर चर्चा कर रहा है, लेकिन उन्होंने अंतरराष्ट्रीय सहमति हासिल नहीं की है। इसके कारण का कारण javascript on this page में देखा जा सकता है (प्राचीन इतिहास के भूखंडों के लिए उस पृष्ठ पर डेल्टा-टी लिंक भी देखें)। चूंकि राष्ट्रीय सरकारों ने स्पष्ट भेद नहीं किया है, इसलिए 1 9 72 से सेकंड की गिनती को परिभाषित करने का कोई भी प्रयास कुछ अधिकार क्षेत्र के कानूनों के अनुसार अमान्य होने का जोखिम चलाता है। आईटीयू-आर के प्रतिनिधि इस जटिलता से अवगत हैं, जैसा कि पीओएसईक्स समिति के लोग हैं। जब तक राजनयिक मुद्दों का काम नहीं किया जाता है, तब तक राष्ट्रीय सरकारों और अंतर्राष्ट्रीय मानकों का मतलब सौर और एसआई सेकेंड के बीच स्पष्ट अंतर और पसंद नहीं करता है, लेकिन कंप्यूटर उम्मीदवार सूट का पालन कर सकते हैं।

संबंधित मुद्दे