如何使用 C# .NET(忽略当前时区)将日期时间转换为时间戳?
我正在使用下面的代码:
private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
return epoch;
}
但它根据当前时区返回时间戳值,我需要不使用当前时区的结果。
最佳答案
此刻你正在调用 ToUniversalTime()
- 只是摆脱它:
private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.Ticks - 621355968000000000) / 10000000;
return epoch;
}
或者,IMO 更具可读性:
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
...
private static long ConvertToTimestamp(DateTime value)
{
TimeSpan elapsedTime = value - Epoch;
return (long) elapsedTime.TotalSeconds;
}
编辑:如评论中所述,执行减法时不会考虑您传入的DateTime
的Kind
。您真的应该传入一个 Kind
为 Utc
的值,这样它才能工作。不幸的是,DateTime
在这方面有些问题 - 请参阅 my blog post (关于 DateTime
的咆哮)了解更多详情。
您可能想使用我的 Noda Time日期/时间 API,它使一切都更加清晰,IMO。
关于c# - 如何使用 C#/.NET 将日期时间转换为时间戳(忽略当前时区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814060/