स्ट्रिंग को मिलीसेकंड के साथ ParseExact में एक मान्य दिनांक समय के रूप में मान्यता नहीं दी गई थी
Nov 23 2020
मेरे पास स्ट्रिंग प्रारूप में एक तिथि है, मुझे इसे डेटाइम में बदलने की आवश्यकता है, यह मेरा कोड है:
DateTime dt = DateTime.ParseExact("2018-04-09T09:27:07.247+02:00", "YYYY-MM-DDTHH:mm:ss.SSSZ", System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime();
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")).ToString());
यह दिनांक के साथ काम करता है जैसे: 2020-08-27T00: 00: 00 + 02: 00, लेकिन यह मिलिस की वजह से स्क्रिप्ट की तारीख की तरह काम नहीं करता है। मुझे तिथि पैटर्न कैसे बदलना चाहिए? मैंने उनमें से कई की कोशिश की है, लेकिन मैंने हल नहीं किया।
जवाब
4 John Nov 23 2020 at 13:53
आपके कोड में तीन समस्याएं हैं:
- प्रारूप स्ट्रिंग केस संवेदी हैं (yyyy 4-अंकीय वर्ष का प्रतिनिधित्व करता है, YYYY नहीं करता है, इसी प्रकार dd 2-अंकीय दिन का प्रतिनिधित्व करता है, जबकि DD नहीं करता है)।
.sss.fffमिलीसेकंड के लिए होना चाहिए ।- आप Z (ज़ुलु) की उम्मीद कर रहे हैं, लेकिन आपको वास्तव में एक समय की छूट मिल रही है ("+02: 00")। इसका मतलब है कि प्रारूप स्ट्रिंग आपके डेटाइम स्ट्रिंग से भिन्न है।
मेरा सुझाव है कि आप के साथ परेशान नहीं है DateTime.ParseExact, बस का उपयोग ISO8601 datetimes के लिए DateTimeOffsetहै ' Parseके बजाय (जो समय ऑफसेट और ISO8601 datetimes साथ काम आज्ञा का पालन करेंगे):
DateTimeOffset dt = DateTimeOffset.Parse("2018-04-09T09:27:07.247+02:00", System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime();
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(dt.DateTime, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")).ToString());