簡體   English   中英

DateTime.TryParseExact僅在“單向”中工作

[英]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格式不同的字符串表示形式。

有三件事可能導致這個問題;

由於您嘗試使用DateTime.TryParseExact方法的provider (即InvariantCulture )解析字符串,因此也要根據該提供程序生成字符串。

string dtNow  = DateTime.Now.ToString(format, provider);

你告訴你的CurrentCulturept-BR ,這種文化有空字符串""作為AMDesignatorPMDesignator 這就是為什么你的dtNow字符串在其表示部分沒有任何AM或PM指示符的原因。

這是一個demonstration

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM