[英]DateTime.TryParseExact constantly returns false
我有以下代碼,它在lines數組中獲取元素,並檢查它是否與datetime格式匹配。 此檢查僅對元素37、38、40、41進行。給定以下代碼和調試打印輸出,我可以看到輸出確實與解析匹配。 為什么它返回false?
可能的輸入:
05/03/2005 23:59:59.999
05/3/2005 23:59:59.999
5/03/2005 23:59:59.999
5/3/2005 23:59:59.999
etc...
碼:
lines[i] = lines[i] + " 23:59:59.999"; //YYYY-MM-DDThh:mm:ss[.mmm]
DateTime datetest;
if (DateTime.TryParseExact(lines[i], "MM/dd/yyyy HH:mm:ss.mmm", new CultureInfo("en-US"), DateTimeStyles.None, out datetest))
{
}
else
{
//Log and Drop
logfile.WriteLine(System.DateTime.Now.ToString("yyyy.MM.dd.HH.mm.ss") + ": Row #" + row + ", Column #" + (i) + " was not a date in the right format, dropping line. ");
logfile.WriteLine("Original: " + lines[i]);
Console.WriteLine("Date Wrong");
Console.WriteLine("Date: " + lines[i]);
string input = Console.ReadLine();
continue;
}
控制台輸出:
Date Wrong
Date: 5/23/2004 23:59:59.999
更新:
我嘗試更改分析以查找M / dd / yyyy。 但是,我現在得到此輸出。
Date Wrong
Date: 05/23/2005 23:59:59.999
更新2:
好的,我嘗試更改分析以查找許多建議的“ M / d / yyyy HH:mm:ss.fff”。 我現在得到的輸出是:
Date Wrong
Date: 23.59.59.999
更新3:
好的,我現在已經按照建議嘗試了“ M / d / y H:m:s.fff”,但我仍然得到如下輸出:
Date Wrong
Date: 05/23/2005 23:59:59.999
注意:根據開始變體之前問題的原始版本進行回答。
為什么它返回false?
MM
格式要求月份的兩位數。 您的日期字符串只有一位數字。 使用M
個月格式。 毫秒格式字符串應為fff
而不是mmm
。
以下格式字符串將解析您的輸入
M/dd/yyyy HH:mm:ss.fff
展示:
DateTime datetest;
Console.WriteLine(DateTime.TryParseExact("5/23/2004 23:59:59.999",
"M/dd/yyyy HH:mm:ss.fff", new CultureInfo("en-US"), DateTimeStyles.None,
out datetest));
哪個輸出
True
如果希望允許一個月的數字,則需要d
而不是dd
。 為了使您能夠繼續進行下去,您需要准確地確定希望支持的日期格式。
您嘗試解析為錯誤的日期時間格式。 更改為:“ M / dd / yyyy HH:mm:ss.fff”
回應評論:
DateTime datetest;
var dateTimes = new [] { "05/03/2005 23:59:59.999", "05/3/2005 23:59:59.999", "5/03/2005 23:59:59.999", "5/3/2005 23:59:59.999" };
foreach(var dateTimeToParse in dateTimes)
if (DateTime.TryParse("5/3/2005 23:59:59.999", new CultureInfo("en-US"), DateTimeStyles.None, out datetest))
Console.WriteLine(dateTimeToParse + " parses to: " + datetest);
else
Console.WriteLine("FAIL!");
適用於我的機器:
2005年5月3日23:59:59.999解析為:2005-05-03 23:59:59
2005年5月3日23:59:59.999解析為:2005-05-03 23:59:59
5/03/2005 23:59:59.999解析為:2005-05-03 23:59:59
2005年5月3日23:59:59.999解析為:2005-05-03 23:59:59
我看不到lines [I]的內容,但是注釋中描述的格式與TryParse中使用的格式之間的不匹配可能只是您的問題:
lines[i] = lines[i] + " 23:59:59.999"; //YYYY-MM-DDThh:mm:ss[.mmm]
...
if (DateTime.TryParseExact(lines[i], "MM/dd/yyyy HH:mm:ss.mmm",
使用這個(就像已經建議的漢斯和戴維一樣):
class Program
{
static void Main(string[] args)
{
List<String> datetimeList = new List<string>();
datetimeList.Add("05/03/2005 23:59:59.999");
datetimeList.Add("05/3/2005 23:59:59.999");
datetimeList.Add("5/03/2005 23:59:59.999");
datetimeList.Add("5/3/2005 23:59:59.999");
DateTime datetest;
foreach (string s in datetimeList)
{
if (!DateTime.TryParseExact(s, "M/d/yyyy HH:mm:ss.fff", new CultureInfo("en-US"), DateTimeStyles.None, out datetest))
{
Console.WriteLine("Error");
}
else
{
Console.WriteLine("Success");
}
}
Console.Read();
}
}
打印4次“成功”。
這只是一個概念證明,我不希望有任何投票。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.