दिनांक स्वरूप yyyy-MM-ddTHH: mm: ssZ


102

मुझे लगता है कि यह बहुत सरल होना चाहिए, लेकिन इसे प्राप्त नहीं किया जा सका :( इस प्रारूप में Z समय क्षेत्र है।
T लंबा समय पैटर्न है
मैं इस प्रारूप में एक तिथि कैसे प्राप्त कर सकता हूं सिवाय उपयोग के

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));

C # में


मुझे पता है कि इस सवाल को लगभग 9 साल हो गए हैं लेकिन इसका UtcNow.ToString(s)+Zगलत जवाब गलत है। ISO8601 RoundTrip विकल्प द्वारा समर्थित है ToString("O")। यह भी इंगित करने के लिए कि स्वीकृत उत्तर डेटाइम के यूटीसी मूल्य का उपयोग करता है, जो हमेशा वास्तविक डेटाइम मूल्य का उपयोग करने के बजाय, हमेशा समय ज़ोन ज़ेड दे देगा, जिसमें (यदि किड = स्थानीय) एक दिन का समय बचत हो सकता है। स्वीकृत उत्तर को बदलने पर विचार करें?
रिचर्डिसिमो

जवाबों:


144

यूटीसी का उपयोग करना

आईएसओ 8601 ( MSDN डेटाइम प्रारूप )

Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");

2009-11-13T10: 39: 35Z

जेड वहाँ वजह से है

यदि समय UTC में है, तो बिना स्पेस के समय के बाद सीधे 'Z' जोड़ें। 'Z' शून्य UTC ऑफसेट के लिए ज़ोन डिज़ाइनर है। "09:30 यूटीसी" को "09: 30Z" या "0930Z" के रूप में दर्शाया गया है। "14:45:15 यूटीसी" "14: 45: 15Z" या "144515Z" होगा।

यदि आप एक ऑफसेट शामिल करना चाहते हैं

int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours;
string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00"));
string isoformat = DateTime.Now.ToString("s") + offset;
Console.WriteLine(isoformat);

नोट करने के लिए दो चीजें: + या - समय के बाद की जरूरत है लेकिन स्पष्ट रूप से + सकारात्मक संख्या पर नहीं दिखाता है। विकिपीडिया के अनुसार ऑफ़सेट + hh प्रारूप या + hh: mm में हो सकता है। मैं सिर्फ घंटे के लिए रखा है।

जहाँ तक मुझे पता है, RFC1123 (HTTP दिनांक, "u" फ़ॉर्मैटर ) का अर्थ टाइम ज़ोन ऑफ़सेट्स देना नहीं है। सभी बार GMT / UTC होने का इरादा है।


ठंडा। आपके आउटपुट में TZ ऑफसेट शामिल नहीं है, हालांकि?
नील बर्नवेल

मैंने इसे जोड़ा - डॉक्स का कहना है कि 's' का प्रारूप ISO8601 पर आधारित है , मुझे नहीं लगता कि इसमें टाइमज़ोन शामिल है।
क्रिस एस

ओह, यूटीसी में टाइमज़ोन नहीं है। डी 'ओह। वह अपने आउटपुट में टाइमजोन की जानकारी मांग रहा है। हो सकता है कि DateTimeOffset वह है जिसे वह खोज रहा है?
नील बैर्नवेल

5
Z को मैन्युअल रूप से जोड़ना अच्छा नहीं है, आपको इसका उपयोग करना चाहिए। TStString ("o") क्योंकि यह आपको उचित आउटपुट देगा। यदि मिलीसेकंड समस्या है, तो उन्हें गोल किया जाना चाहिए। यदि आप इसे स्थानीय समय में जोड़ते हैं, तो Z मैन्युअल रूप से जोड़ना गलत परिणाम दे सकता है, जो वास्तव में UTC नहीं है।
तुक्का लिंड्रोस

67
Console.WriteLine(DateTime.UtcNow.ToString("o"));  
Console.WriteLine(DateTime.Now.ToString("o"));

आउटपुट:

2012-07-09T19:22:09.1440844Z  
2012-07-09T12:22:09.1440844-07:00

मैंने Console.WriteLine (DateTime.Now.ToString ("o")) का उपयोग किया;); धन्यवाद
Ziggler

5
स्वीकृत उत्तर प्रारूप निर्दिष्टक "s" का उपयोग करने के लिए कहता है और UTC तिथियों के लिए अंत में Z जोड़ देता है। यह सब अच्छा और ठीक है अगर आपको मिलीसेकंड की आवश्यकता नहीं है, लेकिन यदि आप चाहते हैं कि मिलीसेकंड आपको इस उत्तर शो की तरह "ओ" का उपयोग करना है। "ओ" के साथ, मिलीसेकंड डिफ़ॉल्ट रूप से दिखाई देता है और Z पहले से ही UTC तारीखों के लिए जोड़ा जाता है।
जिम

1
DateTime.Now.ToString ("ओ") सभी प्रकार की समस्याओं को हल करता है क्योंकि यह इसके साथ सही ऑफसेट लौटाता है।
मो ज़ातर

12

DateTime बनाम DateTimeOffset के लिए "o" प्रारूप अलग है :(

DateTime.UtcNow.ToString("o") -> "2016-03-09T03:30:25.1263499Z"

DateTimeOffset.UtcNow.ToString("o") -> "2016-03-09T03:30:46.7775027+00:00"

मेरा अंतिम उत्तर है

DateTimeOffset.UtcDateTime.ToString("o")   //for DateTimeOffset type
DateTime.UtcNow.ToString("o")              //for DateTime type

7

C # 6+ में आप स्ट्रिंग इंटरपोलेशन का उपयोग कर सकते हैं और इसे और बेहतर बना सकते हैं:

$"{DateTime.UtcNow:s}Z"

आपने मेरा बहुत समय बचाया। सरल और मीठा समाधान।
राजू पलादिया

6

देखो यहाँ "यू" और "एस" पैटर्न पर। पहला 'टी' विभाजक के बिना है, और दूसरा बिना टाइमजोन प्रत्यय के है।



5

"O" प्रारूप का उपयोग करके स्ट्रिंग में परिवर्तित करने से पहले एक विकल्प DateTime को ToUniversalTime () में परिवर्तित किया जा सकता है । उदाहरण के लिए,

var dt = DateTime.Now.ToUniversalTime();
Console.WriteLine(dt.ToString("o"));

यह उत्पादन होगा:

2016-01-31T20:16:01.9092348Z

2

यह Salesforce REST API क्वेरी डेटाइम प्रारूपों के साथ ठीक काम करता है

DateTime now = DateTime.UtcNow;
string startDate = now.AddDays(-5).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");   
string endDate = now.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");  
//REST service Query 
string salesforceUrl= https://csxx.salesforce.com//services/data/v33.0/sobjects/Account/updated/?start=" + startDate + "&end=" + endDate;

// https://csxx.salesforce.com/services/data/v33.0/sobjects/Account/updated/?start=2015-03-10T15:15:57Z&end=2015-03-15T15:15:57Z

यह बिना किसी समस्या के Salesforce से परिणाम लौटाता है।


-6

आप चीजों को विभाजित कर सकते हैं, इसके लिए अधिक कोड की आवश्यकता होगी लेकिन आप जिस तरह से इसे पसंद करेंगे वैसे ही काम करेंगे:

DateTime year = DateTime.Now.Year;
DateTime month = DateTime.Now.Month;
DateTime day = DateTime.Now.Day;

ect।

आखिरकार:

Console.WriteLine(year+month+day+etc.);

यह हालांकि इसे संभालने का एक बहुत ही साहसिक तरीका है ...


यह उत्तर वांछित आउटपुट जैसा कुछ भी नहीं पैदा करता है
cja

इसने यह नहीं बताया कि प्रश्न या मैं क्या चाहता था ... -1
ज़िगलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.