2011-06-16 15 views
5

मैं सी # के आंतरिक पर एक विशेषज्ञ नहीं हूं इसलिए यह सवाल वास्तव में मूर्खतापूर्ण हो सकता है। यदि हां, तो कृपया मुझे सही करें। मेरे पास SQL ​​सर्वर से निकाले गए कुछ डेटा (यूटीसी प्रारूप में) हैं।सी # के भीतर यूटीसी समय को संभालना?

2011-03-26 11:03:58.000 
2011-03-26 11:04:25.000 
... 

मैं इस फ़ाइल सी # अंदर पार्स करने कर रहा हूँ और निम्न का उपयोग कर रहा:

DateTime date = DateTime.Parse(value); 

DateTime वस्तु में मूल्य लाने के लिए। अब, मैं कुछ मनमाने ढंग से समय इस समय से 6 घंटे घटाकर हूँ इस प्रकार है:

date = date.Subtract(new TimeSpan(6, 0, 0)); 

और अंत में, मैं इस वापस एक और फाइल में इस प्रकार लिख रहा हूँ:

output.WriteLine(date.ToString("yyyy-MM-dd HH:mm:ss.fff")); 

क्योंकि मैं किसी भी नहीं किया है निहित रूपांतरण, आउटपुट भी यूटीसी है। मेरा सवाल यह है कि, इस तरह के अतिरिक्त/घटाए गए समय पर अनुमोदित समय है या क्या मुझे समय में हेरफेर करने में सक्षम होने से पहले कुछ यूटीसी को सी # विशिष्ट रूपांतरण करने की आवश्यकता है? मुझे इसके चारों ओर अपने सिर लपेटने में कठिनाइयों का सामना करना पड़ रहा है। क्या कोई इसे स्पष्ट करेगा?

संपादित करें: एक संक्षिप्त प्रश्न लिखने का प्रयास मूल दिनांक यूटीसी में है। मैं कुछ समय जोड़ना/घटाना चाहता हूं और इसे यूटीसी में वापस लिखना चाहता हूं। मैं जानना चाहता हूं कि क्या मैं सीधे पार्स की तारीख में हेरफेर कर सकता हूं या मुझे कुछ रूपांतरण करने की ज़रूरत है यानी सी # स्पष्ट रूप से बताएं कि तारीख यूटीसी प्रारूप में है और फिर इसे कुशलतापूर्वक उपयोग करें और फिर यूटीसी तिथि वापस लिखने के लिए इसे फिर से बताएं।

+1

बस एक छोटा सा, असंबंधित संकेत: आप 'उपयोग कर सकते हैं TimeSpan.FromHours (8)' कोड अधिक पठनीय बनाने के लिए। सेसेकंड्स, सेमिन्यूट इत्यादि भी हैं –

+0

हू? मुझे आपकी समस्या नहीं दिख रही है। – SLaks

+0

@ स्लक्स: मैंने एक और संक्षिप्त प्रश्न जोड़ने का प्रयास किया है। – Legend

उत्तर

4

यह वास्तव में कोई फर्क नहीं पड़ता। एक तिथि एक तिथि है, इससे कोई फर्क नहीं पड़ता कि यह किस समय क्षेत्र में है। जब तक कि आप इसे किसी भिन्न समय क्षेत्र में परिवर्तित नहीं कर लेते हैं, नेट को पता नहीं है कि यह किस समय क्षेत्र है।

यदि आप चाहते हैं, तो आप DateTime.SpecifyKind(value, DateTimeKind.Utc) पर कॉल कर सकते हैं।

2

मूल तारीख UTC समय है, या आपके स्थानीय समय? यदि मूल स्थानीय समय है और आप इसे यूटीसी बनाने के लिए 8 घंटे घटा रहे हैं, तो DateTime.ToUniversalTime() का उपयोग करें। दूसरी तरफ जाने के लिए, DateTime.ToLocalTime() का उपयोग करें। या क्या मैं कुछ न कुछ भूल रहा हूं?

+0

मूल तारीख यूटीसी में भी है। मेरी गलती, कि 8 घंटे सिर्फ एक मनमाना संख्या थी जिसे मैं घटा रहा हूं और मुझे यूटीसी में बदलने की कोशिश करने के साथ कुछ भी नहीं करना है। – Legend

+0

उस स्थिति में, आप जो भी चाहें उसे कर सकते हैं। डेटटाइम में विशिष्ट दिनांक भागों को जोड़ने के तरीके भी हैं, जैसे DateTime.AddHours()। पूरी सूची यहां है: http://msdn.microsoft.com/en-us/library/system.datetime_members(v=vs.71).aspx। घंटों को घटाने के लिए, केवल ऋणात्मक संख्या जोड़ें। –

+0

आपके संपादन की समीक्षा करने के बाद, मुझे संदेह है कि आप वास्तव में क्या पूछ रहे हैं "क्या .NET डेटटाइम क्लास में कुछ आंतरिक धारणा है कि यह यूटीसी या कुछ अन्य समय क्षेत्र का प्रतिनिधित्व करती है", इस मामले में उत्तर ऐसा नहीं है। –

1

इनपुट स्ट्रिंग सार्वभौमिक होने के साथ, आप DateTime.Parse का ओवरलोड लोड कर सकते हैं जो इसे इंगित करने के लिए DateTimeStyle स्वीकार करता है।

string utcDateString = "2011-03-26 11:03:58.000"; 

DateTime localDate = DateTime.Parse(utcDateString, 
          CultureInfo.CurrentCulture, 
          DateTimeStyles.AssumeUniversal); 

DateTime utcDate = localDate.ToUniversalTime(); 

इस स्निपेट में, localDate सार्वभौमिक समय इनपुट के स्थानीय समय होगा। तो ईडीटी (यूएस) के लिए, यह 7:03:58 पूर्वाह्न होगा। इनपुट स्ट्रिंग से मेल खाने वाले utcDate में 11:03:58 होगा।

3

आपको SQL सर्वर से डेटाटाइम को पार्स करने की आवश्यकता नहीं है। ADO.Net परिणामस्वरूप datetime प्रकार कॉलम के लिए SqlDateTime ऑब्जेक्ट लौटाएगा। ओआरएम पुस्तकालय (LinqToSQL, इकाई फ्रेमवर्क इत्यादि) datetime प्रकार कॉलम DateTime गुणों पर मैपिंग करने में पूरी तरह से सक्षम हैं। यदि आप स्वयं को एक स्ट्रिंग को पार्स करते हैं, तो आप इसे गलत कर रहे हैं (SET DATEFORMAT के सभी प्रभावों का उल्लेख न करें ...)

एक नोट के रूप में आपके द्वारा वर्णित ऑपरेशन सीधे सर्वर पर किया जा सकता है, उदाहरण के लिए।एक यूटीसी datetime क्षेत्र के लिए एक घंटे जोड़ सकते हैं और वापस सहेज यूटीसी दिनांक के रूप में:

UPDATE table SET column = DATEADD(hour, 1, column) WHERE ... 
संबंधित मुद्दे