95

में टाइमस्टैम्प बनाता है, मैं सोच रहा था, क्या डेटाटाइम से सी # में टाइमस्टैम्प बनाने का कोई तरीका है? मुझे एक मिलीसेकंद परिशुद्धता मान की आवश्यकता है जो कॉम्पैक्ट फ्रेमवर्क में भी काम करता है (कह रहा है कि डेटटाइम। टोबीरी() सीएफ में मौजूद नहीं है)।फ़ंक्शन जो सी #

मेरे समस्या यह है कि मैं एक डेटाबेस नास्तिक तरीके से इस मूल्य स्टोर करने के लिए तो मैं इसे बाद में sortby और पता लगाने के जो मूल्य, से दूसरे आदि

+2

स्वीकार किए जाते हैं जवाब यहाँ एक अच्छा समाधान देता है, लेकिन अगर आप एक असली टाइमस्टैम्प चाहते हैं, यह क्यू/ए की जाँच: http://stackoverflow.com/questions/ 9814060/कैसे-टू-कन्वर्ट-डेटटाइम-टू-टाइमस्टैम्प-उपयोग-सी-नेटइनिंग-वर्तमान-टाइमज़ोन/9814280 # 9814280 – inanutshellus

उत्तर

189

मैं हमेशा निम्नलिखित की तरह कुछ का उपयोग करें:

public static String GetTimestamp(this DateTime value) 
{ 
    return value.ToString("yyyyMMddHHmmssfff"); 
} 

यह आपको 200905211035131468 इस तरह की स्ट्रिंग दे देंगे, के रूप में स्ट्रिंग सर्वोच्च क्रम से चला जाता है आपके एसक्यूएल प्रश्नों में सबसे कम ऑर्डर सरल स्ट्रिंग सॉर्टिंग के लिए टाइमस्टैम्प के बिट्स का उपयोग तिथि के अनुसार ऑर्डर करने के लिए किया जा सकता है यदि आप किसी डेटाबेस में मान चिपक रहे हैं

+4

आपको 21 महीने कैसे मिलते हैं और केवल 12 मिलते हैं? :) – PaulB

+1

मेरे भाग पर गलत टाइप, अब – RobV

+2

को सही किया गया है वर्ष के लिए टोकन यहां लोअरकेस होना चाहिए: वापसी मूल्य। टॉस्ट्रिंग ("yyyyMMddHHmmssffff"); –

18

आप DateTime.Ticks संपत्ति इस्तेमाल कर सकते हैं अधिक से अधिक है सकते हैं चाहता हूँ जो एक लंबा और सार्वभौमिक स्टेरबल है, हमेशा कॉम्पैक्ट फ्रेमवर्क पर भी बढ़ रहा है और प्रयोग योग्य है। बस सुनिश्चित करें कि आपके कोड के बाद 31 दिसंबर 9999 नहीं किया जाता है;)

+0

हम्म दिलचस्प, मैं इसे आज़माउंगा। – Konstantinos

+0

जब आप "हमेशा बढ़ते" कहते हैं - इस बात की कोई गारंटी नहीं है कि डेटटाइम पर दो कॉल। UtcNow.Ticks अलग-अलग मान देंगे, है ना? दूसरे शब्दों में आपको एक अद्वितीय टाइमस्टैम्प के रूप में उपयोग करने से पहले आपको अभी भी कुछ सावधानी की आवश्यकता है। –

+0

वास्तव में मैंने अभी इसका इस्तेमाल किया है और मेरे पास कुछ बिंदुओं पर डुप्लिकेट मान हैं। – Konstantinos

41

मेरा मानना ​​है कि आप निम्न का उपयोग करके एक यूनिक्स स्टाइल डेटास्टैम्प सटीक बना सकते हैं

//Find unix timestamp (seconds since 01/01/1970) 
long ticks = DateTime.UtcNow.Ticks - DateTime.Parse("01/01/1970 00:00:00").Ticks; 
ticks /= 10000000; //Convert windows ticks to seconds 
timestamp = ticks.ToString(); 

भाजक समायोजन आप टाइमस्टैम्प का वास्तविक वास्तविक बार के अनुरूप बल्कि उन्हें अद्वितीय (किसी दिए गए आवेदन उदाहरण के लिए) होना चाहता हूँ चाहते हैं तो आप परिशुद्धता

+0

एनईटी कॉम्पैक्ट फ्रेमवर्क पर 1 काम करता है? – ppumkin

+1

बेहतर समाधान के लिए देखें: http://stackoverflow.com/a/26225744/187650 – juFo

3

के अपने स्तर का चयन करने के लिए, आपको निम्न कोड का उपयोग कर सकते की अनुमति देता है :

public class HiResDateTime 
{ 
    private static long lastTimeStamp = DateTime.UtcNow.Ticks; 
    public static long UtcNowTicks 
    { 
     get 
     { 
      long orig, newval; 
      do 
      { 
       orig = lastTimeStamp; 
       long now = DateTime.UtcNow.Ticks; 
       newval = Math.Max(now, orig + 1); 
      } while (Interlocked.CompareExchange 
         (ref lastTimeStamp, newval, orig) != orig); 

      return newval; 
     } 
    } 
} 
7

तुम भी उपयोग कर सकते हैं

Stopwatch.GetTimestamp() ToString();।

2

यू सेकंड में की जरूरत है जब:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds; 
संबंधित मुद्दे