2015-11-21 87 views
1

我登录时在很多地方设置IIS中不同的时区或web.config中

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但我的服务已经在我有很多代码的改变,我正在寻找一个简单的解决方案。

谢谢。

+0

'LogTime'内发生了什么?你记录一天中的实际时间吗?或者你是否减去了两个'DateTime'值来衡量动作花了多长时间? –

+0

我只是把代码的一部分,这是为了计算时间差异,我真正的意思是关于datetime.now()函数。 – fizmhd

回答

4

有几件事情:

  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中的“时区!=偏移量”。)可以使用TimeZoneInfo.GetSystemTimeZones()或通过调用tzutil /l来查看Windows时区列表命令行。

    然后在您的应用程序:

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

    你或许应该重构你的代码,这是您的LogTime方法内完成。然后你将只有一个地方为你的应用程序设置时区。