प्रतिनिधि इंटरव्यू विषय

एक सही क्रॉस-टाइम-ज़ोन बुकिंग के लिए आप JavaScript Temporal का उपयोग कैसे करेंगे?

कोडिंगमध्यम
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक क्रॉस-टाइम-ज़ोन बुकिंग डिज़ाइन करें: उपयोगकर्ता स्थानीय दिनांक और समय चुनता है, और डेलाइट-सेविंग नियम बदलते समय भी सिस्टम को सटीक रूप से सूचित करना चाहिए। Temporal का उपयोग करते हुए प्रकारों (types), रूपांतरण (conversion), पर्सिस्टेंस और त्रुटियों की व्याख्या करें।

प्रॉम्प्ट और संदर्भ

एक ग्लोबल बुकिंग सिस्टम “New York time 2026-11-01 01:30” प्राप्त करता है और प्रतिभागियों को उनके अपने ज़ोन में प्रदर्शित और सूचित करता है। JavaScript Temporal का उपयोग करते हुए, डेलाइट-सेविंग ट्रांज़िशन के दौरान गैर-मौजूद या दोहराए गए स्थानीय समय को संभालते हुए पार्सिंग, ज़ोन बाइंडिंग, पर्सिस्टेंस और डिस्प्ले को डिज़ाइन करें। दिनांक, समय और ज़ोन सिमेंटिक्स को एक स्ट्रिंग या Date ऑब्जेक्ट में संक्षिप्त न करें।

इंटरव्यूअर क्या टेस्ट कर रहा है

संकेत Temporal.Instant, Temporal.ZonedDateTime, Temporal.PlainDateTime, और Temporal.PlainDate के बीच अंतर करने, IANA नियमों, DST अस्पष्टता, प्रिसिजन और सीरियलाइज़ेशन को समझने के हैं। मजबूत उत्तर यह समझाते हैं कि एक बिज़नेस कैलेंडर तिथि स्वचालित रूप से एक UTC इंस्टेंट क्यों नहीं होती है और कैलेंडर सिस्टम को कैसे सुरक्षित रखा जाए।

पहले पूछने योग्य स्पष्टीकरण प्रश्न

इनपुट सिमेंटिक्स

पुष्टि करें कि क्या इनपुट किसी नामित ज़ोन में वॉल-क्लॉक समय है या पहले से हल किया गया (resolved) इंस्टेंट है, और क्या ज़ोन इवेंट, संगठन या ब्राउज़र से आता है। ज़ोन के बिना, स्थानीय समय अस्पष्ट होता है।

DST अस्पष्टता नीति

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

पर्सिस्टेंस आवश्यकता

निर्धारित करें कि क्या कोई रिमाइंडर एक पूर्ण (absolute) इंस्टेंट है या स्थानीय कैलेंडर में हर साल दोहराया जाता है। एक बार की बुकिंग और जन्मदिन जैसे नियम के लिए अलग-अलग Temporal प्रकारों की आवश्यकता होती है।

एक 30-सेकंड का उत्तर ढांचा

“उपयोगकर्ता इनपुट को PlainDateTime और एक स्पष्ट IANA ज़ोन के रूप में रखें, फिर ZonedDateTime और Instant बनाने के लिए उत्पाद की नीति लागू करें। एक बार के रिमाइंडर के लिए एक Instant को पर्सिस्ट करें और डिस्प्ले के लिए इसे प्रत्येक देखने वाले के ज़ोन में बदलें। आवर्ती इवेंट्स के लिए स्थानीय दिनांक, समय, ज़ोन और कैलेंडर नियमों को पर्सिस्ट करें। स्पष्ट रूप से अस्वीकार करें या एक DST असंदिग्धता (disambiguation) चुनें और मूल सिमेंटिक्स को सुरक्षित रखें; Date की अंतर्निहित स्थानीय-ज़ोन पार्सिंग से बचें।”

गहन उत्तर के चरण

चरण 1: सही प्रकार चुनें

PlainDate बिना ज़ोन की कैलेंडर तिथि है, PlainDateTime बिना ज़ोन की वॉल-क्लॉक तिथि और समय है, ZonedDateTime एक IANA ज़ोन को बाइंड करता है, और Instant समयरेखा पर एक बिंदु है। पहले व्यावसायिक अर्थ से प्रकार का चयन करें।

चरण 2: पार्स करें और ज़ोन को बाइंड करें

उपयोगकर्ता इनपुट को PlainDateTime में पार्स करें, एक विश्वसनीय ज़ोन पहचानकर्ता प्राप्त करें, और उन्हें ZonedDateTime में संयोजित करें। कभी भी ब्राउज़र या सर्वर डिफ़ॉल्ट ज़ोन को इवेंट ज़ोन के रूप में चुपचाप उपयोग न करें।

चरण 3: DST ट्रांज़िशन को संभालें

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

चरण 4: रिमाइंडर इंस्टेंट में बदलें

एक बार की बुकिंग के लिए, ZonedDateTime से एक Instant प्राप्त करें और एक सामान्यीकृत स्ट्रिंग को पर्सिस्ट करें। Instant द्वारा शेड्यूल करें; मूल वॉल-क्लॉक टेक्स्ट की पुनर्व्याख्या करने के बजाय इसे केवल डिस्प्ले के समय ही देखने वाले के ज़ोन में बदलें।

चरण 5: आवर्ती-इवेंट सिमेंटिक्स को सुरक्षित रखें

स्थानीय समय 09:00 पर एक वार्षिक इवेंट को एक UTC ऑफ़सेट के रूप में संग्रहीत नहीं किया जा सकता क्योंकि DST उस ऑफ़सेट को बदल देता है। PlainDate, PlainTime, IANA ज़ोन और कैलेंडर सिस्टम को पर्सिस्ट करें, फिर प्रत्येक घटना के लिए एक नया ZonedDateTime हल करें।

चरण 6: प्रिसिजन और कैलेंडर परिभाषित करें

निर्दिष्ट करें कि क्या मिलीसेकंड, माइक्रोसेकंड या नैनोसेकंड की आवश्यकता है; सीरियलाइज़ेशन के दौरान ट्रंकेट न करें और क्रमबद्धता (ordering) को न तोड़ें। गैर-ISO व्यावसायिक कैलेंडर के लिए, इसकी तिथि को ISO तिथि के रूप में मानने के बजाय कैलेंडर पहचानकर्ता को पर्सिस्ट करें।

चरण 7: सीमाओं का परीक्षण करें

स्प्रिंग-फ़ॉरवर्ड और फॉल-बैक, वर्ष की सीमाओं, लीप दिवसों, टाइम-ज़ोन डेटाबेस अपडेट, लोकेल अंतर और सीरियलाइज़ेशन राउंड ट्रिप को कवर करें। केवल स्ट्रिंग्स की तुलना करने के बजाय इंस्टेंट, स्थानीय डिस्प्ले और पुनरावृत्ति नियम को अलग से प्रमाणित (assert) करें।

उच्च गुणवत्ता वाला नमूना उत्तर

मैं इनपुट को PlainDateTime के रूप में पार्स करूँगा, एक IANA ज़ोन की आवश्यकता रखूँगा, और ZonedDateTime बनाने के लिए एक स्पष्ट DST नीति लागू करूँगा। एक बार के रिमाइंडर के लिए Instant को पर्सिस्ट करूँगा और प्रत्येक देखने वाले के लिए इसे रूपांतरित करूँगा; पुनरावृत्तियों के लिए स्थानीय दिनांक, समय, ज़ोन और कैलेंडर नियमों को पर्सिस्ट करूँगा और हर बार एक नया इंस्टेंट निकालूँगा। परीक्षण गैर-मौजूद और दोहराए गए समय, लीप दिवस, ज़ोन-डेटाबेस अपडेट और प्रिसिजन को कवर करते हैं। यह Date के अंतर्निहित-ज़ोन व्यवहार से बचाता है।

सामान्य गलतियाँ

  • गलती: PlainDateTime को UTC मानना। → कारण: इसमें कोई ज़ोन सिमेंटिक्स नहीं है। → सुधार: पहले एक स्पष्ट IANA ज़ोन बाइंड करें।
  • गलती: वार्षिक इवेंट्स के लिए केवल एक UTC ऑफ़सेट को पर्सिस्ट करना। → कारण: DST स्थानीय ऑफ़सेट को बदल देता है। → सुधार: स्थानीय समय और ज़ोन नियमों को पर्सिस्ट करें।
  • गलती: दोहराए गए फॉल-बैक समय को अनदेखा करना। → कारण: एक वॉल समय दो इंस्टेंट पर मैप होता है। → सुधार: अस्वीकार करें या स्पष्ट रूप से पहले/बाद का चयन करें।
  • गलती: केवल स्ट्रिंग समानता को मान्य करना। → कारण: स्ट्रिंग्स इंस्टेंट या कैलेंडर सिमेंटिक्स को साबित नहीं करती हैं। → सुधार: Instant, ZonedDateTime, और पुनरावृत्ति व्यवहार को अलग से प्रमाणित करें।

फॉलो-अप प्रश्न और उत्तर

फॉलो-अप 1: आपको कब एक Instant पर्सिस्ट करना चाहिए?

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

फॉलो-अप 2: जन्मदिन को Instant के रूप में क्यों संग्रहीत नहीं किया जाना चाहिए?

जन्मदिन एक स्थानीय कैलेंडर तिथि है, आमतौर पर विश्व स्तर पर एक साथ होने वाला इंस्टेंट नहीं। दिनांक, ज़ोन और कैलेंडर नियमों को स्टोर करें, फिर प्रत्येक घटना के लिए एक इंस्टेंट की गणना करें।

फॉलो-अप 3: क्या टाइम-ज़ोन डेटाबेस अपडेट सहेजी गई बुकिंग को प्रभावित कर सकता है?

हाँ। भविष्य के स्थानीय समय नियम बदल सकते हैं। मूल ज़ोन और सिमेंटिक्स को सुरक्षित रखें, आवश्यकता पड़ने पर नियम संस्करण रिकॉर्ड करें, और परिभाषित करें कि पुनर्गणना को कैसे संभाला जाता है।

फॉलो-अप 4: क्या Temporal स्वचालित रूप से DST अस्पष्टता तय करता है?

API असंदिग्धता विकल्प प्रदान करता है, लेकिन उत्पाद को अस्वीकार, पहले, बाद में, या संगत व्यवहार चुनना होगा। एक डिफ़ॉल्ट विकल्प कोई व्यावसायिक नीति नहीं है।

सार्वजनिक स्रोत

संबंधित प्रश्न

संबंधित इंटरव्यू टूल

कोडिंग प्रॉम्प्ट के लिए स्क्रीनशॉट का उपयोग करें

समस्या को कैप्चर करें, फिर क्रम से प्रतिबंधों (constraints), समाधान, कोड, एज केस और जटिलता पर काम करें।

टूल देखें