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

本文关键字:时区 设置 IIS web config | 更新日期: 2023-09-27 18:23:47

我在的许多地方记录时间

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为另一个国家主持同样的项目对于这个主机,我需要时间使用该国家的当地时间登录。

有没有什么方法可以做到这一点,而不必修改我代码的每一行。

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

谢谢。

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

几件事:

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

  2. DateTime.Now不应用于服务器端应用程序,例如ASP.Net web应用程序。阅读针对DateTime.Now.的案例

  3. 如果您只是在计算某个程序运行所需的时间,那么根本不要使用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
    
  4. 如果您确实希望当前时间位于特定时区,那么您需要知道时区标识符。(GMT+4和GMT+3不是时区,而是时区偏移量请参阅时区标记wiki中的"时区!=偏移量"。)您可以使用TimeZoneInfo.GetSystemTimeZones()或在命令行上调用tzutil /l来查看Windows时区列表。

    然后在您的应用程序中:

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

    您可能应该重构代码,以便在LogTime方法中完成这项工作。然后,您将只有一个地方可以为您的申请设置时区。