C# DateTime.TryParse中的奇怪行为
我正在尝试用解析一个日期时间字符串“5-5-5-5” 我希望这能转化为C# DateTime.TryParse中的奇怪行为,c#,.net,C#,.net,我正在尝试用解析一个日期时间字符串“5-5-5-5” 我希望这能转化为 5/5/2005 5:00:00 AM 5/5/2005 10:30:00 AM. 但它却被转换成了 5/5/2005 5:00:00 AM 5/5/2005 10:30:00 AM. 看起来它将提供的日期时间解释为GMT。这有点违反直觉,因为我已经指定了AssumeLocal标志。这是DateTime类中的一个错误吗?如果您希望得到以下结果: 2005年5月5日上午5:00:00 : 日期和时间作为协调世界时(
5/5/2005 5:00:00 AM
5/5/2005 10:30:00 AM.
但它却被转换成了
5/5/2005 5:00:00 AM
5/5/2005 10:30:00 AM.
看起来它将提供的日期时间解释为GMT。这有点违反直觉,因为我已经指定了
AssumeLocal
标志。这是DateTime
类中的一个错误吗?如果您希望得到以下结果:
2005年5月5日上午5:00:00
:
日期和时间作为协调世界时(UTC)返回。如果输入字符串通过时区说明符或AssumeLocal表示本地时间,则日期和时间将从本地时间转换为UTC。如果输入字符串通过时区说明符或AssumeUniversal表示UTC时间,则不会发生转换。如果输入字符串不表示本地时间或UTC时间,则不会发生转换,并且结果的种类属性未指定。
此值不能与RoundtripKind一起使用
将以下代码用作调整通用代码:
DateTime result;
dt= DateTime.TryParse("5-5-5-5" , CultureInfo.InvariantCulture,DateTimeStyles.AdjustToUniversal , out result);
如果希望得到以下所需结果: 2005年5月5日上午5:00:00 : 日期和时间作为协调世界时(UTC)返回。如果输入字符串通过时区说明符或AssumeLocal表示本地时间,则日期和时间将从本地时间转换为UTC。如果输入字符串通过时区说明符或AssumeUniversal表示UTC时间,则不会发生转换。如果输入字符串不表示本地时间或UTC时间,则不会发生转换,并且结果的种类属性未指定。 此值不能与RoundtripKind一起使用 将以下代码用作调整通用代码:
DateTime result;
dt= DateTime.TryParse("5-5-5-5" , CultureInfo.InvariantCulture,DateTimeStyles.AdjustToUniversal , out result);
DateTimeStyles.AdjustToUniversal
是您要找的。DateTimeStyles.AdjustToUniversal
是您要找的。我理解您的观点,并调试dot net framework代码,以了解后台发生了什么
TryParse
方法正在忽略datetimestyle。假定本地
标志,仅处理AdjustToUniversal
标志
另一方面,正确实现了TryParseExact
方法,它具有处理datetimestyle.AssumeLocal
标志所需的所有逻辑。请参阅如何在此实现中处理其他案例
另一方面,调试dotnet框架代码很有趣。如果您感兴趣,请按照中的步骤进行操作 我理解您的观点,并调试dot-net框架代码,以了解后台发生了什么
TryParse
方法正在忽略datetimestyle。假定本地
标志,仅处理AdjustToUniversal
标志
另一方面,正确实现了TryParseExact
方法,它具有处理datetimestyle.AssumeLocal
标志所需的所有逻辑。请参阅如何在此实现中处理其他案例
另一方面,调试dotnet框架代码很有趣。如果您感兴趣,请按照中的步骤进行操作 如果希望将其假定为本地并将其转换为UTC,则必须组合这些标志:
DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal
或者,如果源已经是通用的,并且您希望DateTimeKind
为UTC:
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal
阅读更多关于
调整通用性:
DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal
如果s包含时区偏移量,或者s不包含时区信息,但样式包含DateTimeStyles.AssumeLocal标志,则该方法解析字符串,调用ToUniversalTime将返回的DateTime值转换为UTC,并将Kind属性设置为DateTimeKind.UTC
如果希望将其假定为本地并将其转换为UTC,则必须组合这些标志:
DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal
或者,如果源已经是通用的,并且您希望DateTimeKind
为UTC:
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal
阅读更多关于
调整通用性:
DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal
如果s包含时区偏移量,或者s不包含时区信息,但样式包含DateTimeStyles.AssumeLocal标志,则该方法解析字符串,调用ToUniversalTime将返回的DateTime值转换为UTC,并将Kind属性设置为DateTimeKind.UTC
废话进来,废话出去。编辑:返回值是什么?为什么字符串是那种格式?也许至少应该是“5-5-5 5:00”?你在尝试实现某件事,但做得不对,
这是DateTime类中的一个错误吗
不是票价。你有可能在印度吗?@AmitKumarGhosh为什么我需要调整到通用?AssumeLocal—如果解析字符串中未指定时区,则假定该字符串表示本地时间。这不管用吗?我试图理解这里的问题。胡说八道,胡说八道。编辑:返回值是什么?为什么字符串是那种格式?也许至少应该是“5-5-5 5:00”?你在尝试实现某件事,但做得不对,这是DateTime类中的一个错误吗
不是票价。你有可能在印度吗?@AmitKumarGhosh为什么我需要调整到通用?AssumeLocal—如果解析字符串中未指定时区,则假定该字符串表示本地时间。这不管用吗?我试图理解这里的问题。这似乎有效,但为什么我需要调整到通用?AssumeLocal—如果解析字符串中未指定时区,则假定该字符串表示本地时间。这不管用吗?我正在努力理解这里的问题。@gawicks试着给出5-5-5-0?它将显示结果为5:30(+印度为5.30)。如果5-5-5-5,它只会增加5个小时,结果为10.30,这就是Aron评论的原因。这里似乎有些混乱。让我这样重新表述这个问题。5-5-5 5:00+AssumeLocal=2005年5月5日上午5:00:00(这是预期的)。但是5-5-5-5+AssumeLocal=5/5/2005 10:30:00(这很奇怪)如何:5-5-5 5:00+AssumeLocal=5/5/2005 5:00:00?你不能期待结果!这不是除虫夜