【问题标题】:Setting different time zone in IIS or web.config在 IIS 或 web.config 中设置不同的时区
【发布时间】:2016-02-23 16:49:03
【问题描述】:

我在很多地方记录时间

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

我用过的所有地方

日期时间.现在

我现在面临一个问题, 我目前将其托管在海湾服务器中,格林威治标准时间 +4:00 我需要在 Gmt +3Gmt 为另一个国家举办同样的项目 对于此托管,我需要时间使用该国家/地区的当地时间进行记录。

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

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

谢谢。

【问题讨论】:

  • LogTime 内部发生了什么?你在记录一天中的实际时间吗?或者您是否要减去两个 DateTime 值来衡量该操作花费了多长时间?
  • 我只是放了一部分代码,这是用于计算时间差异的,我真正的意思是关于 datetime.now() 函数。

标签: c# iis timezone


【解决方案1】:

一些事情:

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

  2. DateTime.Now 绝不应在服务器端应用程序中使用,例如 ASP.Net Web 应用程序。阅读The case against 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 不是时区,而是时区偏移量请参阅the timezone tag wiki 中的“时区!= 偏移量”。)您可以使用以下命令查看 Windows 时区列表TimeZoneInfo.GetSystemTimeZones(),或者在命令行调用tzutil /l

    然后在您的应用程序中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2014-07-20
    • 2012-10-19
    • 2010-11-17
    相关资源
    最近更新 更多