我用
尝试了How can I convert a DateTime to the number of seconds since 1970? DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = DateTime.Parse(@"28/05/12 01:30");
TimeSpan diff = date.ToUniversalTime() - origin;
Console.WriteLine( (Math.Floor(diff.TotalSeconds)).ToString());
输出= 1338161400
与之相比是错误的 http://www.mbari.org/staff/rich/utccalc.htm 1338168600
为什么?
答案 0 :(得分:2)
这很可能来自时区差异。如果将值存储在临时变量中并查看,您可能会看到ToUniversalTime
正确修改原始值:
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = DateTime.Parse(@"05/28/2012 01:30:00");
date = date.ToUniversalTime();
在我的情况下,当我将日期设置为UniversalTime后,我将时间视为5:30:00,因为我在东海岸。
所以,为了强制这个按照你的预期,我只是把我的时间转移到了GMT(将我的约会时间改为4小时:
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = DateTime.Parse(@"05/27/2012 9:30:00 pm");
date = date.ToUniversalTime();
TimeSpan diff = date - origin;
Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString());
这会产生:1338168600
答案 1 :(得分:0)
.NET DateTime
相关的类应该 Just Work 。他们经常这样做,但如果你在当地时间以外的任何地方工作,你必须注意细节。 (这不是特定于.NET的问题 - 时区,尤其是DST,经常导致严重的问题。)以下代码段应该产生正确的输出,无论您的语言环境如何:
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime date = DateTime.Parse(@"28/05/12 01:30", null, System.Globalization.DateTimeStyles.AssumeUniversal);
TimeSpan diff = date.ToUniversalTime() - origin;
Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString());
请注意,对于两个输入日期,需要明确指定日期应被视为UTC日期而不是本地日期。 ToUniversalTime()
电话似乎是多余的,但必须产生适当的差异。这似乎是对减号运算符执行的疏忽。
另请参阅MSDN上的Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo。