Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.TryParse中的奇怪行为_C#_.net - Fatal编程技术网

C# DateTime.TryParse中的奇怪行为

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-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

:

日期和时间作为协调世界时(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?你不能期待结果!这不是除虫夜