关于c#:在IIS或web.config中设置不同的时区

Setting different time zone in IIS or web.config

我在许多地方记录时间

1
2
3
4
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与asp.net,但由于我的服务已经上升,我有很多代码要改变,我正在寻找一个更简单的解决方案。

谢谢。


一些东西:

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

  • 绝不应在服务器端应用程序中使用DateTime.Now,例如ASP.Net Web应用程序。阅读针对DateTime.Now的案例。

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

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

    然后在你的申请中:

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

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