2015-11-11 6 views
8

मुझे टाइम प्रदाता सेवा को कॉल करने के लिए DateTime.UtcNow को स्थिर रूप से DateTimeOffset.UtcNow पर कॉल करने के लिए कोड के कुछ टुकड़े को स्थिर रूप से कॉल करने की आवश्यकता है। इस DateTimeOffset उदाहरण को DateTime पर कनवर्ट करने के लिए, DateTime संपत्ति है। वैकल्पिक रूप से, ऐसा लगता है कि DateTimeOffset से DateTime पर एक अंतर्निहित रूपांतरण है।DateTimeOffset.UtcNow.DateTime डेटटाइम के बराबर है। UtcNow?

मैं थोड़ा चिंतित हूं कि कुछ किनारे के मामले हो सकते हैं जिन्हें मैं अभी नहीं देख सकता हूं, जहां ये दोनों बराबर नहीं होंगे। वहां हैं?

+1

"इस डेटटाइम ऑफसेट उदाहरण को डेटटाइम में आगे कनवर्ट करने के लिए, दिनांक समय संपत्ति है" - वहां 'UtcDateTime' प्रॉपर्टी भी है, जो आपके परिदृश्य – Joe

उत्तर

4

आंतरिक यह इस तरह दिखता है:

public static DateTimeOffset UtcNow { 
     get { 
      return new DateTimeOffset(DateTime.UtcNow); 
     } 
    } 

    public DateTime DateTime { 
     get { 
      return ClockDateTime; 
     } 
    } 
    private DateTime ClockDateTime { 
     get { 
      return new DateTime((m_dateTime + Offset).Ticks, DateTimeKind.Unspecified); 
     } 
    } 

    public DateTime UtcDateTime { 
     [Pure] 
     get { 
      Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Utc); 
      return DateTime.SpecifyKind(m_dateTime, DateTimeKind.Utc); 
     } 
    } 

तो ऐसा लगता है कि आप एक दिनांक समय कि यूटीसी पर आधारित था लेकिन फिर Unspecified में परिवर्तित हो जाता हो रही लग सकती है।

+0

के लिए अधिक उपयुक्त प्रतीत होती है, जिसके परिणामस्वरूप' डेटटाइम। स्पेसिफीकिंड 'को परिणाम पर कॉल करना चाहिए इसे 'डेटटाइम.यूटीसीएनओ' के लिए पूरी तरह से समान बनाने के लिए पर्याप्त हो, है ना? – hvd

+0

सही प्रतीत होता है, हालांकि यह तीसरे डेटटाइम ऑब्जेक्ट को बनाने के लिए नहीं करेगा? UTCNow, ClockDateTime और फिर अंत में समायोजित प्रकार। यदि ओपी कन्वर्ट करने में खुश है तो हां यह ठीक हो सकता है। यदि यह कुछ मौजूदा कोड है जो उन पर भरोसा कर रहा है तो 100% समकक्ष होने पर समस्याएं हो सकती हैं। – MattC

+0

क्या मैं 'डेटटाइम 'संपत्ति के बजाय' डेटटाइम 'संपत्ति के बजाय' .UtcDateTime' का उपयोग कर सकता हूं? इस प्रकार: 'DateTimeOffset.UtcNow.UtcDateTime' –

2

the .NET reference source से:

public static DateTimeOffset UtcNow { 
    get { 
     return new DateTimeOffset(DateTime.UtcNow); 
    } 
} 

तो, हाँ, ऐसा लगता है कि यह DateTime.UtcNow के बराबर है।

+0

ऐसा लगता है कि थोड़ी देर बाद आगे बढ़ेगा, इसलिए मुझे लगता है कि आप सही हैं कि उनके पास एक ही मूल्य हो सकता है लेकिन 'डेटटाइमकिंड' सेटिंग के बारे में निश्चित नहीं है। – MattC

3

यदि आप DateTimeOffset.UtcNow.DateTime.Kind के मान को देखते हैं तो आप देखेंगे कि यह निर्दिष्ट नहीं है। निर्दिष्ट प्रकार को ढांचे द्वारा स्थानीय समय के रूप में माना जाता है। DateTime.UtcNow की तरह यूटीसी है, इसलिए समय-समय पर रूपांतरण स्थानीय टाइमज़ोन पर लागू होने पर भिन्नताएं होंगी।

आसपास का काम DateTimeOffset.UtcNow.UtcDateTime का उपयोग करना है जिसमें यूटीसी प्रकार निर्दिष्ट है।

संबंधित मुद्दे