2011-08-22 7 views
5

में मैं इसे संशोधित और एक अतिरिक्त घंटे/Datetime वस्तु के लिए ऑफसेट जोड़े बिना एक Datetime वस्तु के लिए एक स्ट्रिंग परिवर्तित करने के लिए कोशिश कर रहा हूँ।की उपेक्षा कर डीएसटी (डेलाइट सेविंग टाइम) नेट

string dateStr = "2011-03-18T12:07:00.000+10:00"; //Convert this string to datetime AS IS 

DateTime date = Convert.ToDateTime(dateStr); 

Console.WriteLine("Original string: " + dateStr); 
Console.WriteLine("date toString: " + date.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffK")); 

उत्पादन:

Original string: 2011-03-18T12:07:00.000+10:00 
date toString: 2011-03-18T13:07:00.000+11:00 

किसी को भी इंगित कर सकते हैं कि कैसे मैं डीएसटी अनदेखा कर सकते हैं या बस भी जो मैं चाहता करने के लिए वापस तिथि परिवर्तित

इस कोड है एक डाटाटाइम ऑब्जेक्ट के रूप में, इसकी सराहना की जाएगी।

दिनांक को संशोधित करने के रास्ते नीचे जा रहे हैं: मैं Datetime वापस कन्वर्ट करने के लिए कोशिश की है, लेकिन मैं बाहर काम नहीं कर सकता Datetime वस्तु में समय क्षेत्र बदलने के लिए कैसे और जब मैं एक DatetimeOffset वस्तु का उपयोग इस काम करने के लिए, जब मैं DatetimeOffset.Datetime फोन इसके बिना ऑफसेट

+0

नेट किस संस्करण का उपयोग कर रहे हैं? –

+0

यह .NET 3.5 में है। क्या जॉन स्कीट के नोडा टाइम का कोई यूआरएल है? – Eiji

+0

@Eiji, http://code.google.com/p/noda-time/ – Amy

उत्तर

0
नेट ढांचे में

TimezoneInfo वर्ग जवाब दे सकता है (http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx)

string dateStr = "2011-03-18T12:07:00.000+10:00"; //Convert this string to datetime AS IS 

DateTime localDateTime = DateTime.Parse(date); 

DateTime utcDateTime = localDateTime.ToUniversalTime(); 
string estKey = "Eastern Standard Time"; 
TimeZoneInfo estTimeZone = TimeZoneInfo.FindSystemTimeZoneById(estKey); 
DateTime estDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, estTimeZone); 

Console.WriteLine("Original string: " + dateStr); 
Console.WriteLine("date toString: " + estDateTime); 
+0

सहायता की सराहना करते हैं, लेकिन दुर्भाग्य से हम उस विधि के साथ ** estDatetime ** में ऑफसेट खो देते हैं। – Eiji

3

एक Datetime रिटर्न DateTime ऑब्जेक्ट में समय क्षेत्र नहीं है। यह केवल एक Kind, जो Utc, Local, या Unspecified हो सकती है।

जब Convert.ToDateTime बुला, अगर किसी भी ऑफसेट ऑफसेट कि लागू किया जाएगा और उसके बाद मूल्य स्थानीय समय क्षेत्र में परिवर्तित हो जाएगा मौजूद है,। यही वह समय क्षेत्र है जहां कोड चल रहा है।

फिर, उत्पादन प्रारूप में K का उपयोग करके, यह उस विशेष तिथि के लिए स्थानीय समय क्षेत्र की भरपाई रिटर्न।

इस परिदृश्य सही ढंग से संभाल करने के लिए, DateTimeOffset प्रकार का उपयोग करें:

string dateStr = "2011-03-18T12:07:00.000+10:00"; 

DateTimeOffset dto = DateTimeOffset.Parse(dateStr); 

Console.WriteLine("Original string: " + dateStr); 
Console.WriteLine("dto toString: " + dto.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffK")); 

अपने बयान के बारे में:

जब मैं DatetimeOffset.Datetime फोन यह ऑफसेट

बिना Datetime रिटर्न

यह सही है। केवल DateTimeOffset प्रकार में वापसी के लिए ऑफसेट है। DateTime वस्तु केवल DateTimeKind.Utc के साथ एक DateTime के लिए स्थानीय मशीन की भरपाई, या शून्य लौट सकते हैं।

-1

डेटटाइम डीटी = डेटटाइम.Now.ToUniversalTime() + TimeZoneInfo.Local.BaseUtc ऑफ़सेट;

+0

यह मूल रूप से पूछे जाने वाले * डीएसटी को अनदेखा करते समय दिए गए समय क्षेत्र पर सही ढंग से लागू होता है। – Timo