2009-11-30 13 views
48

मेरे पास डेटटाइम है जिसे मैं "2009-09-01T00: 00: 00.000Z" में प्रारूपित करना चाहता हूं, लेकिन निम्न कोड मुझे "2009-09-01T00: 00: 00.000 + 01: 00" (दोनों पंक्तियां) देता है :मैं डेटटाइम को वेब यूटीसी प्रारूप में कैसे प्रारूपित कर सकता हूं?

new DateTime(2009, 9, 1, 0, 0, 0, 0, DateTimeKind.Utc).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz") 
new DateTime(2009, 9, 1, 0, 0, 0, 0, DateTimeKind.Utc).ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz") 

कोई विचार यह कैसे काम करता है?

उत्तर

99
string foo = yourDateTime.ToUniversalTime() 
         .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"); 
+0

@ डाउनवॉटर: क्या आप हमें यह बताना चाहते हैं कि आपको इस उत्तर के साथ क्या गलत लगता है? – LukeH

+10

यह काम करता है लेकिन .ToUniversalTime() आपकी मौजूदा तिथि को गड़बड़ कर देगा यदि यह पहले से ही यूटीसी में है लेकिन आपकाडेटटाइम चर निर्दिष्ट नहीं करता है। मैंने .oUniversalTime() को हटा दिया और तिथियों को तब दोनों सिरों (डेटाबेस और वेब क्लाइंट) पर अपेक्षित चीज़ों के साथ रेखांकित किया। –

-2

इस प्रयास करें:

DateTime date = DateTime.ParseExact(
    "Tue, 1 Jan 2008 00:00:00 UTC", 
    "ddd, d MMM yyyy HH:mm:ss UTC", 
    CultureInfo.InvariantCulture); 

Previously asked question

+3

मैं (अभी तक) यह पार्स करने का प्रयास नहीं कर रहा हूँ, मैं मैं इसे मुद्रित करने की कोशिश कर रहा हूँ। – Grzenio

3

आप DateTimeOffset वर्ग का उपयोग करना चाहते। '-' एम एम '-'

var date = new DateTimeOffset(2009, 9, 1, 0, 0, 0, 0, new TimeSpan(0L)); 
var stringDate = date.ToString("u"); 

खेद मैं मिलीसेकंड

var stringDate = date.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"); 
6

उपयोग करने के लिए "yyyy है सबसे अच्छा प्रारूप के साथ अपने मूल स्वरूपण याद dd'T'HH ':' मिमी ':' एस एस '।' fffK "।

यदि यूटीसी है या टाइमज़ोन (+ -hh: mm) के साथ स्थानीय है तो स्ट्रिंग पर अंतिम K 'Z' में बदल दिया जाएगा। (http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)

जैसा कि ल्यूकएच ने कहा, तो ToUniversalTime का उपयोग करना अच्छा है यदि आप चाहते हैं कि सभी तिथियां यूटीसी होंगी।

अंतिम कोड है:

string foo = yourDateTime.ToUniversalTime() 
         .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK"); 
42

क्यों बस का उपयोग नहीं करते The Round-trip ("O", "o") Format Specifier?

"O" या 'ओ' के मानक फॉर्मेट स्पेसिफायर एक पैटर्न है कि समय क्षेत्र जानकारी को बरकरार रखता है और एक परिणाम के स्ट्रिंग है जो आईएसओ 8601. का अनुपालन दिनांक समय मूल्यों के लिए उत्सर्जन करता है का उपयोग कर एक कस्टम दिनांक और समय प्रारूप स्ट्रिंग का प्रतिनिधित्व करता है, इस प्रारूप विनिर्देशक दिनांक और समय मूल्यों को दिनांक में दिनांक के साथ संरक्षित करने के लिए डिज़ाइन किया गया है। टेक्स्ट में संपत्ति की खोज करें। स्वरूपित स्ट्रिंग को डेटटाइम का उपयोग करके वापस पार्स किया जा सकता है। पर्स (स्ट्रिंग, आईफॉर्मैटप्रोवाइडर, डेटटाइम स्टाइल) या डेटटाइम। पैरासेएक्सएक्ट विधि यदि स्टाइल पैरामीटर डेटटाइम स्टाइल पर सेट है। राउंडट्रिपकिंड।

"ओ" या "ओ" मानक प्रारूप विनिर्देशक "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '।' FffffffK" दिनांक प्रारूप के लिए कस्टम प्रारूप स्ट्रिंग से मेल खाता है मूल्य और "yyyy" - 'MM' - 'dd'T'HH': 'mm': 'ss'। 'fffffffzzz "दिनांक प्रारूप के लिए कस्टम प्रारूप स्ट्रिंग। इस स्ट्रिंग में, एकल उद्धरण चिह्नों के जोड़े जो हाइफ़न, कोलन, और अक्षर "टी" जैसे व्यक्तिगत वर्णों को सीमित करते हैं, इंगित करते हैं कि व्यक्तिगत वर्ण एक शाब्दिक है जिसे बदला नहीं जा सकता है। Apostrophes आउटपुट स्ट्रिंग में प्रकट नहीं होता है।

ओ "या" ओ "मानक प्रारूप विनिर्देशक (और" yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '।' FffffffK "कस्टम प्रारूप स्ट्रिंग) लाभ लेता है तीन तरीके दिनांक समय मान का प्रकार संपत्ति की रक्षा करने के जो ISO 8601 समय क्षेत्र जानकारी का प्रतिनिधित्व करता है:

public class Example 
{ 
    public static void Main() 
    { 
     DateTime dat = new DateTime(2009, 6, 15, 13, 45, 30, 
            DateTimeKind.Unspecified); 
     Console.WriteLine("{0} ({1}) --> {0:O}", dat, dat.Kind); 

     DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30, 
            DateTimeKind.Utc); 
     Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind); 

     DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30, 
            DateTimeKind.Local); 
     Console.WriteLine("{0} ({1}) --> {0:O}\n", lDat, lDat.Kind); 

     DateTimeOffset dto = new DateTimeOffset(lDat); 
     Console.WriteLine("{0} --> {0:O}", dto); 
    } 
} 
// The example displays the following output: 
// 6/15/2009 1:45:30 PM (Unspecified) --> 2009-06-15T13:45:30.0000000 
// 6/15/2009 1:45:30 PM (Utc) --> 2009-06-15T13:45:30.0000000Z 
// 6/15/2009 1:45:30 PM (Local) --> 2009-06-15T13:45:30.0000000-07:00 
//  
// 6/15/2009 1:45:30 PM -07:00 --> 2009-06-15T13:45:30.0000000-07:00 
+0

'http-equiv =' जैसे मेटा टैग में अंतिम-संशोधित "' प्रारूप *** 2013-10-23 @ 17: 23: 00 यूटीसी *** है, क्या यह संभव है? –

3

कुछ लोगों ने बताया है 'ToUniversalTime' कुछ हद तक असुरक्षित है कि में है कि यह अनायास ही गलत समय dispalys पैदा कर सकता है उस पर विस्तार करना मैं समाधान का एक और विस्तृत उदाहरण प्रदान कर रहा हूं। यहां नमूना डेटटाइम ऑब्जेक्ट का विस्तार बनाता है जो सुरक्षित रूप से यूटीसी डेटटाइम देता है जहां आप वांछित के रूप में ToString का उपयोग कर सकते हैं ...।

class Program 
{ 
    static void Main(string[] args) 
    { 
     DateTime dUtc = new DateTime(2016, 6, 1, 3, 17, 0, 0, DateTimeKind.Utc); 
     DateTime dUnspecified = new DateTime(2016, 6, 1, 3, 17, 0, 0, DateTimeKind.Unspecified); 

     //Sample of an unintended mangle: 
     //Prints "2016-06-01 10:17:00Z" 
     Console.WriteLine(dUnspecified.ToUniversalTime().ToString("u")); 

     //Prints "2016 - 06 - 01 03:17:00Z" 
     Console.WriteLine(dUtc.SafeUniversal().ToString("u")); 

     //Prints "2016 - 06 - 01 03:17:00Z" 
     Console.WriteLine(dUnspecified.SafeUniversal().ToString("u")); 
    } 
} 

public static class ConvertExtensions 
{ 
    public static DateTime SafeUniversal(this DateTime inTime) 
    { 
     return (DateTimeKind.Unspecified == inTime.Kind) 
      ? new DateTime(inTime.Ticks, DateTimeKind.Utc) 
      : inTime.ToUniversalTime(); 
    } 
} 
1
string.Format("{0:yyyy-MM-ddTHH:mm:ss.FFFZ}", DateTime.UtcNow) 

रिटर्न 2017-02-10T08: 12: 39.483Z

0

इस कोड मेरे लिए काम कर रहा है:

var datetime = new DateTime(2017, 10, 27, 14, 45, 53, 175, DateTimeKind.Local); 
var text = datetime.ToString("o"); 
Console.WriteLine(text); 
-- 2017-10-27T14:45:53.1750000+03:00 

// datetime from string 
var newDate = DateTime.ParseExact(text, "o", null); 
संबंधित मुद्दे