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

我想知道,有没有办法在date时间在c#中创build一个时间戳? 我需要一个毫秒的精度值,也可以在Compact Framework中工作(因为DateTime.ToBinary()不存在于CF中)。

我的问题是,我想存储在数据库不可知的方式这个值,所以我可以稍后sorting,并找出哪个值是从另一个更大等

我总是使用像下面这样的东西:

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

这将给你一个string,如200905211035131468,因为string从时间戳的最高阶位到最低阶的简单stringsorting在您的SQL查询可以用来按datesorting,如果你坚持在数据库中的值

我相信你可以创build一个unix风格的date戳准确到一秒使用以下

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

调整分母允许您select您的精度水平

您可以使用DateTime.Ticks属性,这是一个长期和普遍存储,始终增加和可用的紧凑框架以及。 只要确保您的代码在9999年12月31日以后不被使用;)

你也可以使用

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;