Use*_*ser 25 c# asp.net timezone
如何使用C#.NET将日期时间转换为时间戳(忽略当前时区)?
我使用以下代码:
private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
return epoch;
}
Run Code Online (Sandbox Code Playgroud)
但是它根据当前时区返回时间戳值,并且我需要结果而不使用当前时区.
Jon*_*eet 56
在你打电话的那一刻ToUniversalTime()
- 只是摆脱它:
private long ConvertToTimestamp(DateTime value)
{
long epoch = (value.Ticks - 621355968000000000) / 10000000;
return epoch;
}
Run Code Online (Sandbox Code Playgroud)
或者,更可读的是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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述Kind
,DateTime
执行减法时不会考虑传入的内容.你应该真的传入一个值Kind
,Utc
并为此工作.不幸的是,DateTime
在这方面有点不妥- 请参阅我的博客文章(咆哮DateTime
)以获取更多细节.
您可能希望使用我的Noda Time日期/时间API,这使得一切都相当清晰,IMO.
我不确定你想要的是什么.你想要一个TimeStamp吗?然后你可以做一些简单的事情:
TimeStamp ts = TimeStamp.FromTicks(value.ToUniversalTime().Ticks);
Run Code Online (Sandbox Code Playgroud)
既然你命名了一个变量纪元,你想要Unix时间等于你的日期吗?
DateTime unixStart = DateTime.SpecifyKind(new DateTime(1970, 1, 1), DateTimeKind.Utc);
long epoch = (long)Math.Floor((value.ToUniversalTime() - unixStart).TotalSeconds);
Run Code Online (Sandbox Code Playgroud)