asp.net中的时区偏移量

本文关键字:时区 偏移量 net asp | 更新日期: 2023-09-27 18:20:30

我有一个计算用户时间和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岁,我需要做什么改变。

谢谢。

asp.net中的时区偏移量

属性TotalMinutes返回一个双精度。我的猜测是,将其转换为int会使值四舍五入。

在返回之前,请尝试将您的值四舍五入。我会将您的返回语句修改为将总分钟数的值四入。

return (int)Math.Ceiling(TheTimeOffset.TotalMinutes);