[英]DateTime.TryParseExact only working in “One Way”
范围:
我一直在尝试开发一个super-tolerant
DateTime.Parse例程,因此我决定尝试使用大多数“广泛使用”的格式来更好地理解format masks
。
问题:
我已经定义了一个特定的格式(String),我用它作为myDate.ToString(format)
,它可以myDate.ToString(format)
奇迹。 问题是,如果我得到相同的String( .ToString(format)
操作的结果),并将其反馈给DateTime.TryParseExact (...)
则失败。
代码/测试:
System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
// Defining Format and Testing it via "DateTime.ToString(format)"
string format = "MM/dd/yyyy HH:mm:ss tt";
string dtNow = DateTime.Now.ToString (format);
Console.WriteLine (dtNow);
// Trying to Parse DateTime on the same Format defined Above
DateTime time;
if (DateTime.TryParseExact (dtNow, format, provider, System.Globalization.DateTimeStyles.None, out time))
{
// If TryParseExact Worked
Console.WriteLine ("Result: " + time.ToString ());
}
else
{
// If TryParseExact Failed
Console.WriteLine ("Failed to Parse Date");
}
输出为: "Failed to Parse Date".
题:
为什么我可以使用format
字符串将某个日期格式化为文本,但是我不能使用相同的format
将字符串反馈给日期对象?
编辑:
我已将此方法的一部分添加到此示例中 ,并且我想知道为什么“ParseDate”方法无法返回正确的日期,因为“String”的格式正确。
由于您使用DateTime.ToString()
方法而没有任何IFormatProvider
,因此此方法将使用您的CurrentCulture
设置。
这就是你的原因
string dtNow = DateTime.Now.ToString (format);
line 可能会生成与MM/dd/yyyy HH:mm:ss tt
格式不同的字符串表示形式。
有三件事可能导致这个问题;
CurrentCulture
有一个不同的DateSeparator
不是/
CurrentCulture
具有与以下不同的TimeSeparator
:
CurrentCulture
有一个不同的或空的字符串作为AMDesignator
和/或PMDesignator
由于您尝试使用DateTime.TryParseExact
方法的provider
(即InvariantCulture
)解析字符串,因此也要根据该提供程序生成字符串。
string dtNow = DateTime.Now.ToString(format, provider);
你告诉你的CurrentCulture
是pt-BR
,这种文化有空字符串""
作为AMDesignator
和PMDesignator
。 这就是为什么你的dtNow
字符串在其表示部分没有任何AM或PM指示符的原因。
这是一个demonstration
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.