在c#中创建时间戳的函数

时间:2009-05-21 09:28:34

标签: c# timestamp compact-framework database-agnostic time-precision

我想知道,有没有办法在日期时间在c#中创建时间戳? 我需要一个毫秒精度值,也可以在Compact Framework中使用(说因为CF中不存在DateTime.ToBinary())。

我的问题是我希望以数据库不可知的方式存储此值,以便我可以稍后对其进行排序,并找出哪个值来自另一个等等。

6 个答案:

答案 0 :(得分:202)

我总是使用以下内容:

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

这将为您提供类似200905211035131468的字符串,因为字符串从时间戳的最高位到最低位简单字符串排序在SQL查询中可用于按日期排序,如果您在数据库中粘贴值< / p>

答案 1 :(得分:41)

我相信您可以使用以下

创建精确到秒的unix样式日期戳
//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();

调整分母可让您选择精确度

答案 2 :(得分:19)

您可以使用DateTime.Ticks属性,该属性是一个长且通用的可存储属性,也可以在紧凑的框架上增加和使用。请确保您的代码在9999年12月31日之后未使用;)

答案 3 :(得分:7)

您也可以使用

Stopwatch.GetTimestamp()的ToString();

答案 4 :(得分: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;
       }
   }
}

答案 5 :(得分:3)

当你需要几秒钟时:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;