Mar*_*ins 7 c# datetime date-format
范围:
我一直在尝试开发一个super-tolerantDateTime.Parse例程,因此我决定尝试使用大多数"广泛使用"的格式来更好地理解format masks.
问题:
我已经定义了一个我用作的特定格式(String)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");
}
Run Code Online (Sandbox Code Playgroud)
输出是: "Failed to Parse Date".
题:
为什么我可以使用format字符串将某个日期格式化为文本,但我不能使用相同format的字符串将字符串反馈给日期对象?
编辑:
我已将此方法的一部分添加到此示例中,并且我想知道为什么"ParseDate"方法无法返回正确的日期,因为"String"的格式正确.
由于您使用的DateTime.ToString()方法没有任何方法IFormatProvider,因此此方法将使用您的CurrentCulture设置.
这就是你的原因
string dtNow = DateTime.Now.ToString (format);
Run Code Online (Sandbox Code Playgroud)
line 可能会生成与MM/dd/yyyy HH:mm:ss ttformat 不同的字符串表示形式.
有三件事可能导致这个问题;
CurrentCulture有不同的DateSeparator比/CurrentCulture有不同的TimeSeparator比:CurrentCulture有一个不同的或空的字符串作为AMDesignator和/或PMDesignator 由于您尝试使用方法解析字符串provider(也就是InvariantCulture),因此也要DateTime.TryParseExact根据该提供程序生成字符串.
string dtNow = DateTime.Now.ToString(format, provider);
Run Code Online (Sandbox Code Playgroud)
你告诉过你的CurrentCulture是pt-BR和这种文化有空字符串""作为AMDesignator和PMDesignator.这就是为什么你的dtNow字符串在其表示部分没有任何AM或PM指示符的原因.
这里一个demonstration.
| 归档时间: |
|
| 查看次数: |
600 次 |
| 最近记录: |