2017-07-28 179 views
2

我明白这个问题已经以各种形式被覆盖了很多次,但没有一个能够帮助我解决特定的问题。我使用以下方法将输入数据转换为C#DateTime变量。麻烦的是,发送数据的公司声称我错误地将其转换,因为时间比我的系统晚了一个小时。我会认为这与英国夏令时有关,但是在我的结尾或者在他们的最后,这是问题,因为我认为下面的方法会考虑英国夏令时,因为我使用的是ToLocalTime?任何帮助将被感激地接受。C#Unix时间戳到DateTime

private DateTime ConvertTimeStamp(double t) 
{ 
    return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) 
     .AddMilliseconds(t) 
     .ToLocalTime(); 
} 
+0

好点mjwills - 不知道为什么我没有注意到之前。我将编辑上面的代码,因为它会使读起来更容易。 – user470249

+0

不幸的是,我还没有得到他们的原始数据的例子,所以可能没有太大的帮助,但他们声称他们正在发送以下日期时间; 18/07/2017 16:28:09 - 并且这出现在我的系统中(使用上述方法将输入的时间戳转换成); 18/07/2017 15:28:09 – user470249

+1

您可以请他们提供一些样本数据供您在测试中使用吗?即他们给你一些数字和他们应该代表的日期时间,然后你可以使用它们进行正确的测试。我无法想象他们会不愿意这么做...... – Chris

回答

4

ToLocalTime会调整时区是什么地方的时间是电脑实际运行此方法。根据它在云中运行/部署的位置,这可能会给你带来截然不同的结果。时区对于这类东西可能是一个巨大的痛苦。如果他们向您发送UTC unix表示,并且您可以用ToUniversal打开DateTime并从那里打开,那么您可以安全地将其转换回您选择的时区。

如果他们没有发送UTC,你需要准确找出他们期待的时区,并使用它来代替ToLocal。

0

那么这取决于他们给你什么。但假设他们给你UTC时间,你可以使用this method of .Net 4.6并通过.ToLocalTime()将它转换为当地时间。如其他答案所示,最好确保指定“TimeZoneInfo”而不是使用.ToLocalTime()