C#在数千行上执行转换时区。随机获得"提供的DateTime表示无效时间。"

时间:2016-03-28 16:12:26

标签: c# datetime ssis-2012

我很困惑,只是一个简单的问题。我有一些代码循环通过ssis包中的数据行转换时区,它在一行失败,我不知道为什么。

完整的错误消息是:

  

提供的DateTime表示无效时间。例如,当向前调整时钟时,跳过的时间段内的任何时间都是无效的。

我运行转换时间的代码是:

    DateTime easternstandardtime = Row.UniversalTime;

    TimeZoneInfo timeZoneGMT = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
    TimeZoneInfo timeZoneEST = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

    easternstandardtime = TimeZoneInfo.ConvertTime(Row.UniversalTime, timeZoneGMT, timeZoneEST);

    Row.StandardEasternTime = easternstandardtime;

代码在第2行到最后一行(转换时间)失败。 Row.UniversalTime的值为3/27/2016 1:10:03 AM。这怎么不行?变量的完整统计数据如下。对我来说奇怪的是文件的其余部分处理得很好,日期时间都很相似。不确定为什么它随机炸毁这样的值。有什么想法吗?

Full var stats:

?Row.UniversalTime
{3/27/2016 1:10:03 AM}
Date: {3/27/2016 12:00:00 AM}
Day: 27
DayOfWeek: Sunday
DayOfYear: 87
Hour: 1
Kind: Unspecified
Millisecond: 0
Minute: 10
Month: 3
Second: 3
Ticks: 635946378030000000
TimeOfDay: {01:10:03}
Year: 2016

1 个答案:

答案 0 :(得分:2)

由于错误消息 有些 暗示,您尝试在实际不存在的时间内进行转换。

http://www.timeanddate.com/news/time/europe-starts-dst-2016.html

  

欧洲大多数国家/地区将于01:00 UTC向前推进1小时

所以,如果大多数欧洲国家在凌晨1点(格林尼治标准时间)前进,并且你试图在01:10转换格林尼治标准时间,那么这个时间实际上并不存在。夏令时调整。似乎是您的问题。