在IIS或web.config中设置不同的时区

时间:2015-11-21 03:58:57

标签: c# iis timezone

我在许多地方记录时间

If Request.DynamicSettings.AirlineSettings.AirlineGeneralSettings.TimeLogEnabled Then
                        StartTime = DateTime.Now
                        LogTime(Reflection.MethodBase.GetCurrentMethod.DeclaringType.FullName, Reflection.MethodBase.GetCurrentMethod.Name, StartTime, DateTime.Now, "AB-SCR(I)", 0,)
    End If

我用过的所有地方

  

DateTime.Now

我现在面临一个问题, 我目前在海湾服务器托管这个,GMT +4:00 我需要在Gmt + 3Gmt为另一个国家举办同样的项目 对于这个托管我需要时间使用该国家/地区的当地时间记录。

有没有办法做到这一点,而无需修改我的代码的每一行。

我看过这篇文章timzone with asp.net但是由于我的服务已经启动,我需要修改很多代码,我正在寻找一个更简单的解决方案。

感谢。

1 个答案:

答案 0 :(得分:7)

一些事情:

  1. 您无法在IIS配置或web.config中更改时区。这不是IIS问题,而是应用程序代码中的问题。

  2. 不应在服务器端应用程序中使用
  3. DateTime.Now,例如ASP.Net Web应用程序。阅读The case against DateTime.Now

  4. 如果您只计算运行时间,请不要使用DateTime。相反,请使用System.Diagnostics.Stopwatch

    Stopwatch sw = Stopwatch.StartNew();
    // ...do some work ...
    sw.Stop();
    TimeSpan elapsed = sw.Elapsed;  // how long it took will be in the Elapsed property
    
  5. 如果您确实想要特定时区的当前时间,则需要知道时区标识符。 (GMT + 4和GMT + 3不是时区,而是时区偏移the timezone tag wiki中查看"时区!=偏移"。)您可以看到使用TimeZoneInfo.GetSystemTimeZones()或在命令行上调用tzutil /l的Windows时区列表。

    然后在你的申请中:

    string tz = "Arabian Standard Time";
    DateTime now = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);
    

    您应该重构代码,以便在LogTime方法中完成此操作。然后,您将只有一个地方为您的应用程序设置时区。