我在SSIS中有一个C#脚本,它托管在纽约的服务器上。当我直接执行作业(RDP到服务器,F5运行)时,我从下面的代码中获得正确的时区信息:
var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
GeoCodeDateTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);
但是,当我从SQL Agent(在纽约的另一台服务器上托管)运行作业时,我得到了错误的时间。我已经确认两台服务器都有正确的系统时间(控制面板 - >日期和时间)
问题示例:
我今天在东部时间下午1:58运行SQL代理作业,并且GeoCodeDateTime设置为2017-03-27 17:58:32.000
为什么从SQL Agent执行此代码时出现错误的时间?
dlatikay关于输出DateTime.UtcNow的建议引导我进行另一次测试,缩小了这个谜团。 获取时间的代码被编译成我在C#脚本中引用的dll。因此,当通过dll执行代码时,我通过SQL Agent获得了错误的时间。当我直接在SSIS脚本任务中获得时间时,我从SQL Agent执行时得到正确的时间。