ASP.NET中的时区偏移量

3
我有一个方法可以计算用户时间和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);
}

如果用户位于美国东部时区,则该方法返回-300(即60 * -5)。然而,如果用户位于欧洲西部时区,则该方法返回59而不是60。这并不是很重要,但我想知道为什么它不返回60以及需要进行哪些更改。

谢谢。


2
ConvertUTCTimeToUserTime中的代码可能与确定答案相关,因为它直接参与了计算。 - Jeremy S
@JeremyS:请看编辑,我添加了另一个函数。 - frenchie
1个回答

2

属性TotalMinutes返回一个double类型的值。我的猜测是将其转换为int类型会向下取整。

在返回之前尝试将值向上舍入。我建议修改您的返回语句为以下内容,以便将总分钟数向上舍入。

```C# return (int)Math.Ceiling(totalMinutes); ```
return (int)Math.Ceiling(TheTimeOffset.TotalMinutes);

我对之前的帖子进行了编辑,希望这个例子能解决你的问题。 - legrandviking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接