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

Kon*_*nos 100 c# timestamp compact-framework time-precision database-agnostic

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

我的问题是我想以数据库无关的方式存储这个值,所以我可以稍后对其进行排序,并找出哪个值来自另一个等等.

Rob*_*obV 203

我总是使用以下内容:

public static String GetTimestamp(this DateTime value)
{
    return value.ToString("yyyyMMddHHmmssfff");
}
Run Code Online (Sandbox Code Playgroud)

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

  • 你怎么得到21个月只得到12?:) (4认同)
  • 年份的标记在这里应该是小写的:return value.ToString("yyyyMMddHHmmssffff"); (2认同)
  • 请注意,Compact Framework不会传输毫秒数.它们将始终为0.您必须修改代码并添加如下内容:int tick = Environment.TickCount%1000; int ms =(tick> = MOffset)?(tick - MOffset):( 1000 - (MOffset - tick)); ms = Math.Min(999,Math.Max(0,ms)); (2认同)

Vox*_*xel 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();
Run Code Online (Sandbox Code Playgroud)

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


Fra*_*uma 19

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

  • @Konstantinos:如果使用时间戳,则无法避免重复.时间戳不用于唯一键,而是用于标记时间.你说你需要毫秒精度,并且刻度精度为100ns.问题是你会有重复.如果您不希望在DB中需要一个唯一的序列,那很遗憾不是db不可知的. (9认同)
  • "这是一个真实的滴答数,随着时间的推移而增加".但系统时钟可以倒退 - 例如,如果您使用当地时间,或者因为系统时钟已调整,则在夏令时结束时. (3认同)

mgo*_*kal 7

你也可以使用

Stopwatch.GetTimestamp()的ToString();