转换当地时间

本文关键字:当地时间 转换 | 更新日期: 2023-09-27 18:05:04

我需要从日期到毫秒的转换。每个stack over flow或web的例子对我来说都没有结果。谢谢你

转换当地时间

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
}

如果任何运行该代码的机器都将其时区设置为UTC(例如所有Azure服务器),那么转换实际上是错误的,您必须非常小心使用。tuniversaltime()。您应该始终检查DateTime.Now.Kind,并仅在需要时进行转换。这适用于你所有的时间转换。

如果你试图用结果做任何科学的事情,应该注意的是,你不仅要测量从计算机到服务器所需的时间,还要测量机器之间的任何时钟差异。如果一台机器与另一台相差60ms,那么这将包含在您的计算中。您实际上可以测量时钟同步的差异,而不是根据往返所需的时间来测量延迟。

我建议使用datetime . now . tuniversaltime()转换您的本地时间,然后将其转换为Epoch并比较UTC值,以便您知道它们位于同一时区。例如,如果你在夏令时运行它,结果将会大不相同。

从这里获取Epoch转换方法:如何将Unix时间戳转换为DateTime,反之亦然?

在服务器端,将客户机转换回DateTime,然后从另一个DateTime中减去一个DateTime。这会给你一个时间跨度你可以得到时间跨度。毫秒。这将告诉你两者之间的区别。请注意我上面关于机器时钟不同步的评论