سؤال

كنت أتساءل، هل هناك طريقة لإنشاء طابع زمني في C # من تاريخ؟ أحتاج إلى قيمة دقيقة ميلي ثانية تعمل أيضا في إطار مدمج (قائلة أنه نظرا لأن DateTime.tobinary () غير موجود في CF).

مشكلتي هي أنني أرغب في تخزين هذه القيمة بطريقة غير مرغقة في قاعدة البيانات حتى أتمكن من Sortby IT لاحقا ومعرفة القيمة التي تكون أكبر من آخر وما إلى ذلك.

هل كانت مفيدة؟

المحلول

أنا دائما استخدام شيء مثل ما يلي:

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

هذا سوف يمنحك سلسلة مثل 200905211035131468، حيث تذهب السلسلة من أعلى أجزاء من الطابع الزمني إلى أدنى ترتيب، يمكن استخدام فرز السلسلة البسيطة في استعلامات SQL الخاصة بك حسب التاريخ إذا كنت تختتم القيم في قاعدة بيانات

نصائح أخرى

أعتقد أنه يمكنك إنشاء DOTESTAMP UNIX Style دقيقة إلى ثانية باستخدام ما يلي

//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();

تتيح لك ضبط القاسم اختيار مستواك من الدقة

يمكنك استخدام خاصية DateTime.ticks، التي هي مخزنة طويلة وعالمية، متزايدة دائما وقابلة للاستخدام على الإطار المدمج أيضا. فقط تأكد من عدم استخدام الكود الخاص بك بعد 31 ديسمبر 9999؛)

تستطيع ايضا استخذام

stopwatch.gettimestamp (). Tostring ()؛

إذا كنت ترغب في الطابع الزمني الذي يتوافق مع الأوقات الحقيقية الفعلية ولكن أيضا يريدون أن يكونوا فريدين (للحصول على مثيل تطبيق معين)، يمكنك استخدام التعليمات البرمجية التالية:

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;
       }
   }
}

عندما تحتاج في ثوان:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top