转换当地时间

时间:2014-05-23 17:19:37

标签: c# unix datetime

我需要从日期到毫秒的转换。堆栈上流或网络上的每个示例都不会对我产生任何结果。 谢谢

2 个答案:

答案 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。这将告诉你两者之间的区别。请注意我上面关于机器时钟不同步的评论。