यह उत्तर केवल .NET DateTimes के रूपांतरण को एक बाइनरी प्रारूप में संबोधित करता है जो SQL सर्वर के datetime
के बराबर है। डेटाटाइप, इसलिए मेरा मानना है कि यह काफी अलग है कि यह एक अलग उत्तर की गारंटी देता है (मैंने यहां
और यहांए> यह सुनिश्चित करने के लिए कि यह ठीक था)।
जैसा कि @Martin Smith ने बताया, datetime
. का बाइनरी प्रारूप एक विशिष्ट समय के बाद से केवल कई टिक नहीं हैं।
datetime
8 बाइट्स के रूप में संग्रहीत किया जाता है, पहला 4 बाइट्स 01-01-1900 से दिनों की संख्या है और दूसरा 4 बाइट्स उस दिन की मध्यरात्रि से "टिक" की संख्या है, जहां एक टिक 10/3 मिलीसेकंड है।पी>
एक .NET डेटटाइम को एक समान बाइनरी प्रतिनिधित्व में बदलने के लिए, हमें '01-01-1900' के बाद से दिनों की संख्या निर्धारित करने की आवश्यकता है, इसे हेक्स में परिवर्तित करें, और फिर मध्यरात्रि से टिकों की संख्या, जो थोड़ा जटिल है एक .NET टिक 100ns है।
उदाहरण के लिए:
DateTime dt = DateTime.Now;
DateTime zero = new DateTime(1900, 1, 1);
TimeSpan ts = dt - zero;
TimeSpan ms = ts.Subtract(new TimeSpan(ts.Days, 0, 0, 0));
string hex = "0x" + ts.Days.ToString("X8") + ((int)(ms.TotalMilliseconds/3.33333333)).ToString("X8");
जब मैंने यह कोड चलाया, dt
था 9/14/2011 23:19:03.366
, और यह hex
. सेट करता है करने के लिए 0x00009F5E01804321
, जो 2011-09-14 23:19:03.363
. में बदल गया SQL सर्वर में।
मेरा मानना है कि आपको गोल करने के कारण सटीक तिथि प्राप्त करने में हमेशा समस्या होगी, लेकिन यदि आप ऐसी क्वेरी का उपयोग कर सकते हैं जहां डेटाटाइम को मिलीसेकंड तक बिल्कुल मिलान नहीं करना है, तो यह काफी करीब हो सकता है।
संपादित करें
मेरे द्वारा पोस्ट किए गए पहले उत्तर के तहत मेरी टिप्पणी में, मैंने SQL Server 2008 के बारे में पूछा, क्योंकि datetime2
डेटा प्रकार 100ns की सटीकता के साथ समय को स्टोर करता है (कम से कम, यह डिफ़ॉल्ट परिशुद्धता के साथ करता है), जो .NET के साथ अच्छी तरह से मेल खाता है। यदि आप रुचि रखते हैं कि SQL सर्वर में बाइनरी स्तर पर इसे कैसे संग्रहीत किया जाता है, तो देखें मेरा जवाब
एक पुराने प्रश्न के लिए।