我有一个计算用户时间和UTC时间之间时间偏移的方法,其工作原理如下:
public int GetUserLocalTimeToUTCOffset()
{
DateTime TheUTC = DateTime.UtcNow;
DateTime TheLocal = ConvertUTCTimeToUserTime(TheUTC); //*see below
TimeSpan TheTimeOffset = TheLocal - TheUTC;
return (int)TheTimeOffset.TotalMinutes;
}
public DateTime ConvertUTCTimeToUserTime(DateTime TheUTCTime)
{
TimeZoneInfo TheTZ = TimeZoneInfo.FindSystemTimeZoneById(this.UserTimeZoneID);
// try with "Eastern Standard Time" and "W. Europe Standard Time"
DateTime UTCTime = new DateTime(TheUTCTime.Year, TheUTCTime.Month, TheUTCTime.Day, TheUTCTime.Hour, TheUTCTime.Minute, 0, DateTimeKind.Utc);
return TimeZoneInfo.ConvertTime(UTCTime, TheTZ);
}
如果用户在EST时区,则该方法返回-300(即60*-5)。然而,如果用户在欧洲西部时间,则该方法返回59而不是60。没什么大不了的,但我想知道为什么它没有回到60岁,我需要做什么改变。
谢谢。
属性TotalMinutes返回一个双精度。我的猜测是,将其转换为int会使值四舍五入。
在返回之前,请尝试将您的值四舍五入。我会将您的返回语句修改为将总分钟数的值四入。
return (int)Math.Ceiling(TheTimeOffset.TotalMinutes);