在C#创建一个时间戳功能
-
23-08-2019 - |
题
我想知道,有一种方式来创建从日期时间在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;
不隶属于 StackOverflow