[英]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.