小时差异不准确

时间:2014-06-12 13:52:38

标签: c#

我正在使用以下功能

将时间转换为ESt
   public static DateTimeOffset ConvertToTheaterTimeZone2(string TheaterTimeZone, DateTimeOffset Date)
        {
            TimeZoneInfo tzi2 = TimeZoneInfo.FindSystemTimeZoneById(TheaterTimeZone);
            TimeSpan offset2 = tzi2.GetUtcOffset(DateTime.Now);
            Date = Date.UtcDateTime;
            Date = Date.AddMinutes(offset2.TotalMinutes);
            return Date;
        }

然后使用以下方式使用差异小时计算,但不能获得准确的小时plz建议任何其他方式

var hour = (item.Checkindate - ConvertToTheaterTimeZone2("Eastern Standard Time", DateTime.Now)).TotalHours;

2 个答案:

答案 0 :(得分:3)

时区ID"东部标准时间" "这真的意味着"东部时间" ...来自TimeZoneInfo.Id

  

Id属性的值通常(但不总是)与StandardName属性的值相同。协调世界时区的标识符是UTC。

所以基本上,这将在冬季给你UTC-5,在夏天给你UTC-4。这通常是你想要的......但你希望以这种方式执行转换。它不会编译(由于各种原因)并且过于复杂。你应该使用:

TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
return TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, zone);

您可能还想考虑使用我的Noda Time库,这使得这些库更加万无一失,并且允许您使用更标准的IANA时区数据库。

答案 1 :(得分:0)

你好我通过使用以下找出解决方案我可以得到实际的差异,如果它是否正确请建议

public static DateTime ConvertToTheaterTimeZone(string TheaterTimeZone,DateTime Date)         {             TimeZoneInfo \ test = TimeZoneInfo.FindSystemTimeZoneById(TheaterTimeZone);             DateTime targetTime = TimeZoneInfo.ConvertTime(Date,est);             return targetTime;         }

var hour =(item.Checkindate - ConvertToTheaterTimeZone(" Eastern Standard Time",DateTime.Now))。TotalHours;