我需要从日期到毫秒的转换。堆栈上流或网络上的每个示例都不会对我产生任何结果。 谢谢
答案 0 :(得分:1)
static readonly DateTime Epoch = new DateTime(1970, 1, 1);
public static double DateTime2Epoch(DateTime dt, bool convertToUTC = true)
{
if (convertToUTC) dt = dt.ToUniversalTime();
return dt.Subtract(Epoch).TotalSeconds;
}
[STAThread]
static void Main(string[] args)
{
DateTime dt = new DateTime(2014, 5, 23, 17, 2, 50);
Console.WriteLine(DateTime2Epoch(dt)); //1400857370 // I'm GMT+2
Console.WriteLine(DateTime2Epoch(dt, false)); //1400864570
}
答案 1 :(得分:0)
如果运行该代码的任何计算机的时区设置为UTC(例如所有Azure服务器),则必须非常小心使用.ToUniversalTime(),那么该转换实际上是错误的。您应该始终检查DateTime.Now.Kind并仅在需要时进行转换。这适用于您所有的时间转换。
如果您尝试对结果做任何科学研究,请注意您不仅要测量从计算机到服务器所需的时间,还要测量机器之间的任何时钟差异。如果一台机器与另一台机器相距60ms,那么这将包含在您的计算中。您实际上可以测量时钟同步的差异而不是延迟,具体取决于往返的时间。
我建议使用DateTime.Now.ToUniversalTime()转换您的本地时间,然后将其转换为Epoch并比较UTC值,以便您知道它们位于同一时区。如果你在夏令时运行它,例如结果会有很大不同。
从这里抓取Epoch转换方法: How to convert a Unix timestamp to DateTime and vice versa?
在服务器端将客户端转换回DateTime,然后从另一个中减去一个DateTime。这将为您提供TimeSpan,您可以获得TimeSpan.Milliseconds。这将告诉你两者之间的区别。请注意我上面关于机器时钟不同步的评论。