C# DateTime对象的奇怪行为
我做了以下工作:C# DateTime对象的奇怪行为,c#,datetime,C#,Datetime,我做了以下工作: var now = DateTime.Now; var utc = DateTime.UtcNow; var timeSpan = now - utc; Console.WriteLine("Now is: " + now.ToString("yyyy-MM-dd HH:mm:ss:ms") + " utc is: " + utc.ToString("yyyy-MM-dd HH:mm:ss:ms") + " timeSpan: " +
var now = DateTime.Now;
var utc = DateTime.UtcNow;
var timeSpan = now - utc;
Console.WriteLine("Now is: " + now.ToString("yyyy-MM-dd HH:mm:ss:ms") + " utc is: " + utc.ToString("yyyy-MM-dd HH:mm:ss:ms") + " timeSpan: " +
timeSpan.TotalMinutes);
Console.ReadKey();
它给出了以下结果:
如果我把timespan.hours(我实际使用的时间)取为1?
应该是2我做错了什么?在获取时间之间有一些时间间隔(系统甚至可以在这两个调用之间切换进程): 这就是为什么两个值之间的间隔不到2小时。您应该只获取一次时间,然后将其转换为本地时间:
var utc = DateTime.UtcNow;
var now = utc.ToLocalTime();
// timeSpan: 120
或用于将本地时间转换为UTC时间:
var now = DateTime.Now;
var utc = TimeZone.CurrentTimeZone.ToUniversalTime(now);
原因很简单:您的计算会导致两次时间错误。最终的结果有点错误,但是打电话所花的时间 解决方案更简单
Console.WriteLine(TimeZoneInfo.Local.BaseUtcOffset.Hours);
Console.WriteLine(TimeZoneInfo.Local.GetUtcOffset(DateTime.Now).Hours);
当您真正想要的是时区信息时,不需要获取或转换时间。第一行获取“正常”本地时间偏移;如果您的时区受到夏令时或其他调整,秒将获得“now”的偏移量。好的,但奇怪的是控制台中的读数显示精确到毫秒的2小时?但我明白你的意思。感谢您只是一个节点,毫秒的格式不是“…:ms”,您当前的毫秒输出是分+秒。(..:37:42:3742). 改用“yyyy-MM-dd HH:MM:ss.ffff”。
Console.WriteLine(TimeZoneInfo.Local.BaseUtcOffset.Hours);
Console.WriteLine(TimeZoneInfo.Local.GetUtcOffset(DateTime.Now).Hours);