C# 将时间更改为夏令时期间发生DateTime错误
我必须绘制一个从短数组计算的数据集。这是可行的,但当转换到正确的时区时,会引发异常: System.ArgumentException:“提供的DateTime表示无效时间。例如,当时钟向前调整时,跳过的时段中的任何时间都无效。参数名称:DateTime” 问题是数据集是在夏时制转换期间记录的,因此在凌晨2点和3点之间存在间隔。从凌晨2点开始,时间无效,因为它们根本不存在。但是,当我试图包含一个if语句来证明无效时间时,它没有帮助,因为bool“isvalid”总是false。我不明白为什么bool保持为false,尽管几行之后它抛出了一个异常,即这个日期时间无效,那么我能做什么呢?谢谢你的帮助 附加信息:日期0的C# 将时间更改为夏令时期间发生DateTime错误,c#,winforms,datetime,timezone,argumentexception,C#,Winforms,Datetime,Timezone,Argumentexception,我必须绘制一个从短数组计算的数据集。这是可行的,但当转换到正确的时区时,会引发异常: System.ArgumentException:“提供的DateTime表示无效时间。例如,当时钟向前调整时,跳过的时段中的任何时间都无效。参数名称:DateTime” 问题是数据集是在夏时制转换期间记录的,因此在凌晨2点和3点之间存在间隔。从凌晨2点开始,时间无效,因为它们根本不存在。但是,当我试图包含一个if语句来证明无效时间时,它没有帮助,因为bool“isvalid”总是false。我不明白为什么bo
种类是Local
DateTime date_0; //equals {29.03.2020 02:00:00} which is invalid
TimeZoneInfo tzf = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time");
bool isInvalid = tzf.IsInvalidTime(date_0);
if (isInvalid)
{
//do something (but this is never reached)
}
DateTime dt = TimeZoneInfo.ConvertTime(date_0, tzf); //here the exception is thrown
var isSum = tzf.IsDaylightSavingTime(dt);
if (isSum) date_0 = date_0.AddHours(1);
解决方案
谢谢你的宝贵意见。问题是日期0的种类与时区信息不同。我通过将tzf更改为与日期0相对应的Local
,解决了这个问题。现在识别出无效的DateTime
,可以执行进一步的步骤
TimeZoneInfo tzf = TimeZoneInfo.Local;
if(tzf.IsInvalidTime(date_0))
{
// ...
}
我假设您的DateTime
具有类型的未指定的。从在线文档中
然后假设“dateTime是TimeZoneInfo对象的时间,并确定它是否无效”
而表示“假定为本地。将本地时间转换为destinationTimeZone中的时间。”
因此,如果您的本地时区与您的时区信息不一样,结果会令人惊讶
如果您的DateTime.Kind
是本地的,但您的TimeZoneInfo不是本地的,那么文档建议IsInvalidTime将“将DateTime转换为TimeZoneInfo对象的时间并返回false”。这就是。一个总是返回false的函数有什么意义
因为看起来您正在处理的日期时间既不是本地的也不是UTC的,所以您应该将其转换为DateTimeOffset
,或者将所有内容都转换为UTC
date\u 0=DateTime.SpecifyKind(date\u 0,DateTimeKind.Unspecified);
如果(tzf.IsInvalidTime(日期0)){
// ...
}
var dto=新的日期时间偏移量(日期0,tzf.GetUtcOffset(日期0));
“如果dateTime无效,则为true;否则为false。”-因此您的是有效的
变量被反转。它实际上应该是isInValid
或isvalid=!tzf.IsInvalidTime(日期0)代码>另请参见日期0的类型?如果您不是专门处理UTC和本地时间,您可能应该使用DateTimeOffset
@Fildor:您是对的。为了更好地使用,我更改了变量名understanding@JeremyLakeman:日期是本地的。谢谢这帮了大忙,我在原来的帖子中添加了一个解决方案。