Wcf IIS报告错误的时间和时区

Wcf IIS报告错误的时间和时区,wcf,datetime,iis,timezone,Wcf,Datetime,Iis,Timezone,我读到的所有内容都表明IIS使用本地计算机时区,因此要更改有效时区和/或时间,我需要做的就是更改服务器的时区和时间,它将更改IIS服务器看到的有效时区和时间,我有一个服务器运行一个简单的WCF服务,这似乎不适合我 此服务器位于Pacific turf的一个租用服务器场中,但自从我们首次设置它以来,已在其上配置了东部时区。我尝试过重置所有内容,甚至尝试过弹跳框,所以我确信它不是缓存的时间值或如此简单的东西。然而,当我用我的WCF代码试图理解为什么它向所有使用服务的用户发送三个小时的日期时,我发现I

我读到的所有内容都表明IIS使用本地计算机时区,因此要更改有效时区和/或时间,我需要做的就是更改服务器的时区和时间,它将更改IIS服务器看到的有效时区和时间,我有一个服务器运行一个简单的WCF服务,这似乎不适合我

此服务器位于Pacific turf的一个租用服务器场中,但自从我们首次设置它以来,已在其上配置了东部时区。我尝试过重置所有内容,甚至尝试过弹跳框,所以我确信它不是缓存的时间值或如此简单的东西。然而,当我用我的WCF代码试图理解为什么它向所有使用服务的用户发送三个小时的日期时,我发现IIS确信它位于太平洋时区,尽管所有配置都是其他方式


System.TimeZoneInfo.Local报告它在太平洋时间和DateTime。现在给我一个三小时的时间戳,我似乎不知道如何说服IIS,它需要使用东部时间作为创建和分发记录的有效时区。

一般来说,服务器端代码不应依赖于本地时区。从服务器应用程序调用
TimeZoneInfo.Local
DateTime.Now
通常是错误的。看

最佳做法是将服务器设置为协调世界时(UTC),并编写应用程序在内部管理时区。如果您依赖于东部时间,那么您的代码应该执行以下操作:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime now = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);
也就是说,如果
TimeZoneInfo.Local.Id
返回
Pacific Standard Time
,那么只有两种可能的解释:

  • 您的系统确实设置为太平洋时区

  • 您的系统已设置为太平洋时区,但您未重新启动或调用就对其进行了更改

既然你在描述这个问题时已经排除了这两种解释,我只能说你设置时区的方式肯定有问题

尝试在管理员提升的命令提示符下使用
tzutil.exe
tzutil/g
将为您提供当前时区设置
tzutil/s“东部标准时间”
将为美国东部时间设置时区。请确保在更改时区后重新启动应用程序,方法是在管理控制台中回收应用程序池,使用
iisreset
,重新启动IIS,或者(如果必须)重新启动服务器

您也可以通过时区控制面板进行更改


如果您说您已经完成了所有这些,并且您从
tzutil/g
返回了
“东部标准时间”
,但是
TimeZoneInfo.Local.Id
返回了
“太平洋标准时间”
,即使您已经重新启动,那么我称之为BS。那是不可能的。也许有一个更简单的解释,例如,可能您正在部署到多个服务器,并且您正在不同的服务器上设置时区,而不是从中获得结果。

恐怕我的问题比使用DateTime更严重。现在,我正在使用Visual Studio的即时窗口中的这两个调用来确认问题。我继承了一个旧的WSE服务,它在DataSet对象中通信,为另一台服务器上的ASPX应用程序提供数据连接。我将其转换为WCF,但由于涉及的代码太多,无法解决在数据集中交谈的糟糕过程。我们所有的DB DateTime都已记录为UTC,并且ASPX服务处理转换为客户端时间的问题,但WCF假设日期为本地时间,并在接收端将它们调整三个小时,因为它正在感知时区差异。基于涉及的代码量,我不准备处理每个记录集,将所有日期转换为本地时间,以便接收服务可以将它们转换回UTC,这样ASPX就可以正确地转换为客户端时间。WCF假设本地时间不是问题,因为APSX和WCF都应该位于同一时区,但WCF假设时区错误,我们的UTC日期在转换过程中被破坏。此外,TZUtil也在报告“东部标准时间”,我将在今晚跳转整个服务器,而不仅仅是IIS Web服务器,并查看结果,然后在明天返回报告。在此之前,我有一张显示我今天上午状况的图像,可在这里使用远程桌面或终端服务吗?此外,在图像中,除了时区不同之外,两个时间戳之间还有17分钟的差异。在你拍截图之前它闲置了那么久吗?