我想知道,有一种方式来创建从日期时间在c#时间戳? 我需要一个精确到毫秒值也能在Compact Framework的(说既然DateTime.ToBinary()在CF不存在)。

我的问题是,我想存储在一个数据库无关的方式这个值,所以我可以在以后sortby它,并找出哪些值是从另一等更大。

有帮助吗?

解决方案

我始终使用类似下面的:

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

这会给你一个字符串像200905211035131468,为字符串从可以使用的日期,如果你在一个数据库中坚持价值<责令时间戳最低阶简单的字符串在SQL查询排序的最高阶位去/ p>

其他提示

我相信你可以创建一个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();

调整分母,您可以选择您的精度水平

您可以使用DateTime.Ticks属性,它是一个长期而普遍的可存储,随时增加和紧凑的框架使用为好。只要确保你的代码后不会被使用12月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;
       }
   }
}

当u需要以秒为:

var timestamp = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top