गैर-स्थलीय कैलेंडर लागू करना


91

जैसा कि मैं एक और प्रश्न के समाधान में देख रहा था, मैंने खुद को आश्चर्यचकित पाया कि क्या यह संभव Calendarनहीं है कि पृथ्वी के सम्मेलनों पर आधारित कैलेंडर को लागू करने के लिए .NET की कक्षा का उपयोग किया जा सके ।

उदाहरण के लिए, मंगल का दिन पृथ्वी पर एक दिन की तुलना में लगभग 2.7% अधिक है:

अंतरिक्ष यान लैंडर परियोजनाओं द्वारा आज तक इस्तेमाल किया गया एक सम्मेलन 24 घंटे "मार्स क्लॉक" का उपयोग करते हुए स्थानीय सौर समय का ट्रैक रखने के लिए किया गया है, जिस पर घंटे, मिनट और सेकंड उनके मानक (पृथ्वी) अवधि से 2.7% अधिक हैं।

वहाँ किसी भी अच्छा तरीका एक को लागू करना है MarsCalendarऐसी है कि एक दूसरे की लंबाई मानक से अलग है GregorianCalendar, और इस तरह उपयोग करने में सक्षम हो DateTimeसभी के लिए उस पर आधारित वस्तुओं मानक AddDays(), AddHours()आदि कार्यों? (नोट: आदर्श रूप से, एक समाधान - यदि कोई मौजूद है - किसी भी ग्रह की वस्तु के लिए लागू होगा, जिसके लिए "1 दिन" और "1 वर्ष" दोनों को परिभाषित करना संभव है। )


5
हममम कि पहली बार मैं देख रहा हूँ होगा martians पी: हमारी प्रौद्योगिकी पर निर्भर है
user2711965

17
"दिन के सर्वश्रेष्ठ प्रश्न" के लिए एक बैज होना चाहिए, और इसे इसे जीतना चाहिए!
शॉन

4
@DavidKhaykin - एक बार जब आप एक दिन से बड़ी किसी भी चीज़ के लिए उठते हैं, तो 2.7% रूपांतरण टूट जाता है। घंटे / मिनट / सेकंड घूर्णी गति पर आधारित होते हैं, जबकि दिन / महीने / वर्ष कक्षा की गति पर आधारित होते हैं। दूसरी ओर, Calendarपहले से ही प्रति वर्ष दिन की मनमानी संख्या निर्धारित करने का समर्थन करता है।
बोबसन

5
FYI करें, यह C # Calendarवर्ग नहीं है। उसी वर्ग का उपयोग VB.NET या किसी अन्य .NET भाषा द्वारा किया जा सकता है। यह .NET Calendarक्लास है।
जॉन सॉन्डर्स

4
यह एक तरह से दिलचस्प है। कोई भी पृथ्वी-आधारित कैलेंडर मंगल पर ट्रैकिंग के समय के संदर्भ में व्यर्थ होगा। पृथ्वी समय में, मंगल 29 घंटे, 39 मिनट, 35 सेकंड में घूमता है। एक मार्टियन वर्ष 1.8809 पृथ्वी वर्ष है। लेकिन अगर मंगल आपके संदर्भ का फ्रेम है, तो यह सब व्यर्थ है। आपका दिन अभी भी लंबा है लेकिन मंगल को अपनी धुरी पर घूमने में एक समय लगता है। एक सुविधाजनक संख्या में स्लाइस में विभाजित करें, आपको "घंटे" मिलते हैं। उन लोगों को विभाजित करें, आपको मिनट मिलते हैं, उन्हें विभाजित करें और आप सेकंड प्राप्त करें। विभाजन केवल गणितीय रूप से उपयोगी होते हैं, जिसका कोई अर्थ नहीं है कि हम उन्हें क्या कहते हैं।
क्रेग

जवाबों:


13

System.Globalization.Calendarवैश्वीकरण नाम स्थान (यानी JapaneseCalendar) के भीतर से कई गैर-ग्रेगोरियन कैलेंडर कक्षाएं निकाली गई हैं । आपको खुद को लागू करने में सक्षम होना चाहिए। मैं एक नमूना कोड़ा हूँ, लेकिन कैलेंडर कक्षा में 16 सार विधियाँ हैं ...

तुम भी बस से अपनी कक्षा को प्राप्त करने में सक्षम हो सकते हैं GregorianCalendarऔर बस GetMilliseconds(DateTime)विधि को ओवरराइड कर सकते हैं , आधार के रिटर्न मान को कई गुना बढ़ाकर 1.027d


2
दिलचस्प। क्या यह बड़े समय की वृद्धि के लिए प्रचारित होगा, या मुझे हर एक को अलग से ओवरराइड करना होगा?
बोबसन

2
अन्य कैलेंडरों में थोड़ा और अधिक शोध के बाद, मुझे लगता है कि ग्रेगोरियन कैलेन्डर और अन्य कैलेंडर अपने डेटएक्स के सभी तरीकों के पीछे गणित के लिए पास किए गए प्रत्येक डेटाइम के टिक्स संपत्ति का उपयोग करते हैं। यह डेटाइम मानों के साथ जटिल हो जाता है, क्योंकि DayOfYear, DayOfMonth, और DayOfWeek गुण सांसारिक मूल्यों से जुड़े होते हैं। कोई अंतर्निहित System.Globalization नाम स्थान के लिए कैलेंडर है कि कर रहे हैं और अधिक है, इसलिए मैं उन clamped मूल्यों अनुमान लगा रहा हूँ ओवरराइड नहीं किया जा सकता है, तो आप की जरूरत हो सकती से 12 महीने या अधिक से अधिक 365 दिन (हालांकि कुछ कम दिन है) अपनी खुद की DateTime संरचना।
माइकल हॉफमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.