मेरे पास एक दिनांक समय है जो हमारे बैकएंड सिस्टम जैसे 2019-11-27T00:00:00 में संग्रहीत है। अब मैं उस डेटा का उपयोग करना चाहता हूं, जो समय क्षेत्र की परवाह किए बिना दिनांक और समय का प्रतिनिधित्व करता है, बाहरी उपयोगकर्ताओं को भेजे गए JSON दस्तावेज़ के एक भाग के रूप में।

मैं वर्तमान में उपरोक्त मानों का प्रतिनिधित्व करने के लिए Noda Time प्रकार Instant का उपयोग कर रहा हूं।

InstantPattern.CreateWithInvariantCulture("yyyy-MM-ddTHH:mm:ss").Parse("2019-11-27T00:00:00").Value;

जब मैं बाद में JSON दस्तावेज़ में समय आउटपुट करना चाहता हूं तो मैं इसे एक प्रकार में परिवर्तित करना चाहता हूं जो वर्तमान ऑब्जेक्ट के लिए समय क्षेत्र का भी प्रतिनिधित्व कर सकता है। समय क्षेत्र ज्ञात हैं।

उदाहरण के तौर पर, उपरोक्त मान को दस्तावेज़ में इस तरह दर्शाया जाना चाहिए:
स्वीडन: 2019-11-27T00:00:00+01:00
फिनलैंड: 2019-11-27T00:00:00+02:00

कारण मैं ऐसा करना चाहता हूं कि डेटाबेस में दिनांक और समय उस समय का प्रतिनिधित्व करता है जब वर्तमान डेटा उपभोक्ता के लिए स्थानीय समय में कोई घटना होती है। एक उदाहरण "ब्लैक फ्राइडे" बिक्री होगी जो उस वास्तविक देश की मध्यरात्रि से शुरू होती है जहां बिक्री होती है, न कि जब यूटीसी में मध्यरात्रि होती है या इसी तरह। आउटपुट JSON में समय क्षेत्र की जानकारी सेट करके मैं गारंटी दे सकता हूं कि डेटा के उपभोक्ताओं को सही जानकारी मिलती है।

झटपट से ZonedDateTime का उपयोग करने के मेरे सभी प्रयास, इंस्टेंट को UTC समय के रूप में माना जाता है और आउटपुट गलत हो जाता है। शायद कुछ ऐसा है जो मुझे याद आ रहा है, लेकिन दुर्भाग्य से मैं फंस गया हूँ।

मेरे प्रश्न हैं:

  • क्या नोडाटाइम इसके लिए सही पुस्तकालय है?
  • डेटाबेस मानों के लिए तत्काल सही डेटा प्रकार है?
  • क्या ZonedDateTime काम करने का सही तरीका है?
  • मैं किसी झटपट को किसी अन्य प्रकार में कैसे परिवर्तित कर सकता हूं जिसमें TimeZone जानकारी हो सकती है?

अग्रिम में धन्यवाद।

2
Baeck 24 मार्च 2020, 15:06
केवल स्पष्टता के लिए: +01:00 "टाइमज़ोन" नहीं है। यह एक ऑफसेट है। अधिकांश समय, यह समतुल्य होगा, लेकिन यह वही नहीं है, हालांकि। लेकिन विषय पर: यदि आप डीबी में ज़ोनड टाइमस्टैम्प चाहते हैं, तो आप इसके साथ ज़ोन (या ऑफ़सेट) को स्टोर क्यों नहीं करते?
 – 
Fildor
24 मार्च 2020, 15:14
ऑफसेट को स्पष्ट करने के लिए धन्यवाद। मैं डेटाबेस में ज़ोनड डेटा नहीं चाहता, क्योंकि एक वस्तु 10 देशों में मान्य है। वस्तु के वैध होने का समय उदाहरण के लिए 2019-11-27T00:00:00। और यह देशों के संबंध में अलग-अलग यूटीसी समय है। स्वीडन में यह 2019-11-26T23:00:00Z है और फ़िनलैंड में यह 2019-11-26T22:00:00Z है
 – 
Baeck
24 मार्च 2020, 15:17
1
आप TimeZoneInfo.ConvertTimeBySystemTimeZoneId का उपयोग करके डेटटाइम ऑफसेट जेनरेट कर सकते हैं। विधि (चूंकि समय क्षेत्र ज्ञात हैं)। JSON DateTimeOffset ऑब्जेक्ट के साथ अच्छा काम करता है। यदि टाइमज़ोन इसके बजाय केवल ऑफ़सेट हैं, तो आप इसे जोड़ने के लिए डेटटाइम ऑफसेट विधियों का उपयोग कर सकते हैं।
 – 
Jimi
24 मार्च 2020, 15:21
एक माँ के रूप में मेरी ओर से स्पष्टीकरण। डेटा एक मुख्य फ्रेम ईआरपी से उत्पन्न हो रहा है। ईआरपी में डेटा विश्व स्तर पर मान्य है, जैसा कि हम हमेशा कहते हैं "यह आइटम 27 नवंबर की मध्यरात्रि से बेचा जा सकता है"। और देश के संबंध में 27 नवंबर की मध्यरात्रि होती है। इसलिए स्टोर फिनलैंड में आइटम नहीं बेच सकता, भले ही वह इसे स्वीडन या इंग्लैंड बेच सके।
 – 
Baeck
24 मार्च 2020, 15:25
1
जिमी: आपके इनपुट के लिए धन्यवाद। यह मुझे वह आउटपुट देता है जो मैं चाहता हूँ! शुक्रिया!
 – 
Baeck
24 मार्च 2020, 15:35

1 उत्तर

सबसे बढ़िया उत्तर

कुछ महान लोगों की उपरोक्त टिप्पणियों से, मैंने अपनी समस्या को हल कर लिया है

  • अन्य डेवलपर्स को स्थानीय दिनांक और समय के लिए इसे गलती से रखने के लिए डेटाबेस से प्रकार के रूप में इंस्टेंट का उपयोग करना
  • झटपट को डेटटाइम में कनवर्ट करना और फिर TimeZoneInfo.ConvertTimeBySystemTimeZoneId को सही समय पर लागू करना ताकि JSON आउटपुट तैयार किया जा सके।
0
Baeck 24 मार्च 2020, 15:51