मेरी स्थिति यह है कि हम 2005 को समर्थन देने वाले SQL सर्वर डेटाबेस में डेटा संग्रहीत करते हैं। जब डेटटाइम मान संग्रहीत होता है, तो यह ग्राहक के स्थानीय समय में होता है। मुझे उस तारीख को किसी भी अन्य ग्राहक पर कहीं भी प्राप्त करने में सक्षम होना चाहिए, जो भी समय क्षेत्र में हो सकता है, जो कि अन्य क्लाइंट हो सकता है।मैं टाइम ज़ोन समस्याओं को अनदेखा कर SQL सर्वर से डेटटाइम डेटा कैसे प्राप्त कर सकता हूं?
तो उदाहरण के लिए, जब न्यूयॉर्क में कोई उपयोगकर्ता डेटटाइम मान " 2012-12-20 00:00 ", मैं चाहता हूं कि कैलिफ़ोर्निया में उपयोगकर्ता उसी डेटटाइम मान को देख सके। इन डेटटाइम मानों को समय क्षेत्र में अंतर का सम्मान नहीं करना चाहिए, लेकिन यही वह है जो मैं देख रहा हूं। वर्तमान में, SQL सर्वर उस दिनांक समय को कैलिफ़ोर्निया उपयोगकर्ता को "2012-12-19 21:00" के रूप में वितरित करेगा। ध्यान दें कि ईएसटी से पीएसटी में परिवर्तन के कारण -3 घंटे रोलबैक के कारण यह पिछले दिन कैसा है (इस वार्तालाप के प्रयोजनों के लिए डीएसटी मुद्दों को भूल जाओ)।
उस डेटा को वापस शब्दशः प्राप्त करना, और समय क्षेत्र द्वारा अनुवादित नहीं किया गया है, जो मुझे पूरा करने की आवश्यकता है। तो आप क्या सलाह दे सकते हैं?
कुछ कोड पर विचार करना:
यहाँ टेबल है:
CREATE TABLE [dbo].[tblMeterReadings](
[fldMeterReadingsID] [int] IDENTITY(1,1) NOT NULL,
[fldMeterID] [int] NOT NULL,
[fldUser] [varchar](50) NULL,
[fldBy] [varchar](50) NULL,
[fldDateOfReading] [datetime] NULL,
[fldReading] [float] NULL,
[fldIsArchived] [bit] NULL DEFAULT ((0)),
हम एक Sql वर्ग कि काम करता है, और निम्न उदाहरण में "एसक्यूएल" उस की एक वस्तु है कक्षा। कॉल एक पैरामिट्रीकृत क्वेरी जहां @ data0 दिनांक समय वस्तु किसी SQL दिनांक समय क्षेत्र में स्टोर करने के लिए है का उपयोग किया जाता है:
sql.Execute(@"INSERT INTO tblMeterReadings (fldMeterID, fldDateOfReading) VALUES (" + MeterID + ", @data0)", Date);
अंत में, यह ऊपर एक SqlCommand सेट, पैरामीटर देता है, और एक command.ExecuteNonQuery() कॉल आग ।
अब, तारीख को पुनः प्राप्त करने, मैं बस यह एक DataTable में चयन (फिर से, हमारे Sql वर्ग सहायक का उपयोग कर):
DataTable myTable = sql.readDataTable(@"SELECT fldMeterID, fldDateOfReading FROM tblMeterReadings");
तो क्या मुझे लगता है कि डेटाबेस अपने आप में, तारीख है " 2012-12-20 00:00 "जैसा कि मैं उम्मीद करता हूं, लेकिन जब मैं डीबग में myTable सामग्री का निरीक्षण करता हूं, तो मुझे लगता है कि उस तालिका में दिनांक" 2012-12-19 21:00 "है।
डेटाबेस एक SQL सर्वर पर बनाया गया था जो एक ईएसटी स्थिति में मशीन पर चलता है। मेरी मशीन, हालांकि, पीएसटी पर सेट है। इसलिए चयन में दिनांक दिनांक मूल्य मुझे कैसे दिया जाता है में अंतर।
मुझे क्या याद आ रही है?
संबंधित: http://stackoverflow.com/q/2532729/1583 – Oded
आप डेटाबेस को दिनांक कैसे लिख रहे हैं? डेटाबेस में सहेजने से पहले टाइमटाइम से टाइमज़ोन जानकारी को आसानी से अलग करके आपकी समस्या हल होनी चाहिए। –
@ डैनियल हिल्गार्थ - और यदि इसका मतलब है कि आप इसे यूटीसी के रूप में स्टोर करते हैं, तो मैं सहमत होगा। लेकिन वहां पहले से ही बहुत अधिक डेटा है, और जब तक हम बड़े पैमाने पर रूपांतरण प्राप्त नहीं कर लेते हैं, तब तक मुझे मालिश करने की कोशिश कर रहा हूं क्योंकि मेरे पास यह है। – DonBoitnott