C# 使用包含虚线分隔数字的字符串分析误报

C# 使用包含虚线分隔数字的字符串分析误报,c#,date,C#,Date,我正在使用DateTime.Parse从SQLServer读取的文本中解析DateTime 像这样的字符串: 5.4.1 1.1.4 12.1.13 被确定为日期,而不是 我不能使用DateTime.TryParseExact(),因为我必须以不同的格式加载数据: dd/mm/yy dd/mm/yyyy dd MMM YYYY dd-mm-yyyy dd.mm.yyyy 如何根据这些格式解析日期,而忽略如上所示的值?可以根据预期格式解析日期。只需将(固定,mm!=mm)格式传递到Try

我正在使用
DateTime.Parse
从SQLServer读取的文本中解析DateTime

像这样的字符串:

5.4.1 
1.1.4 
12.1.13 
被确定为日期,而不是

我不能使用
DateTime.TryParseExact()
,因为我必须以不同的格式加载数据:

dd/mm/yy
dd/mm/yyyy
dd MMM YYYY
dd-mm-yyyy
dd.mm.yyyy
如何根据这些格式解析日期,而忽略如上所示的值?

可以根据预期格式解析日期。只需将(固定,mm!=mm)格式传递到
TryParseExact()

您可以根据预期的格式解析日期。只需将(固定,mm!=mm)格式传递到
TryParseExact()


如果我们使用您指定的日期,您可以使用下面的代码获得结果

另请参见,因为它已被很好地解释

string[] formats= {"dd/MM/yy","dd/MM/yyyy","dd MMM YYYY","dd-MM-yyyy","dd.MM.yyyy","dd.M.yy","d.M.y"};
  string[] dateStrings = {"5.4.1","1.1.4","12.1.13"}; 
  DateTime dateValue;
  foreach (string dateString in dateStrings)
  {
     if (DateTime.TryParseExact(dateString, formats, 
                                new System.Globalization.CultureInfo("en-US"), 
                                System.Globalization.DateTimeStyles.None, 
                                out dateValue))
        Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
     else
        Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
此代码将导致:

将“5.4.1”改为2001年1月5日上午12:04:00

将“1.1.4”改为2004年1月1日上午12:01:00

将“12.1.13”改为2013年12月1日上午12:01:00

请注意文化信息!这可以根据其设置提供不同的输出。例如:可以切换月份和日期


另外,您可以立即在上尝试此工作片段。

如果我们使用您指定的日期,您可以使用下面的代码获得结果

另请参见,因为它已被很好地解释

string[] formats= {"dd/MM/yy","dd/MM/yyyy","dd MMM YYYY","dd-MM-yyyy","dd.MM.yyyy","dd.M.yy","d.M.y"};
  string[] dateStrings = {"5.4.1","1.1.4","12.1.13"}; 
  DateTime dateValue;
  foreach (string dateString in dateStrings)
  {
     if (DateTime.TryParseExact(dateString, formats, 
                                new System.Globalization.CultureInfo("en-US"), 
                                System.Globalization.DateTimeStyles.None, 
                                out dateValue))
        Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
     else
        Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
此代码将导致:

将“5.4.1”改为2001年1月5日上午12:04:00

将“1.1.4”改为2004年1月1日上午12:01:00

将“12.1.13”改为2013年12月1日上午12:01:00

请注意文化信息!这可以根据其设置提供不同的输出。例如:可以切换月份和日期


另外,您可以立即在上尝试此工作片段。

iam从sql server读取的文本中解析datetime这是什么意思?为什么不能使用
DateTime.TryParseExact
?有什么特别的原因吗?根据您的输入,看起来
d.M.y
d.M.yy
格式很好。@gt.guybrush您必须指定所有格式,请参阅我的答案。老实说,我希望不必指定每个允许的格式,但是,既然我看不到任何替代方法,那么就按照这种方法从sql server读取的文本中解析datetime,这是什么意思?为什么不能使用
DateTime.TryParseExact
?有什么特别的原因吗?根据您的输入,看起来
d.M.y
d.M.yy
格式很好。@gt.guybrush您必须指定所有格式,请参阅我的答案。老实说,我希望不必指定每个允许的格式,但是,由于我看不出有其他办法可以这样做,op的想法是明确地不解析这些格式:
“dd.M.yy”,“d.M.y”
。您应该从formats变量中删除这些格式,以防止它们被解析。通过Marwie注释,我接受这一点作为@CodeCaster one for CultureInfo的解决方案。请注意,op的想法是明确地不解析这些格式:
“dd.M.yy”,“d.M.y”
。您应该从formats变量中删除这些内容,以防止它们被解析。对于Marwie注释,我接受这一解决方案,而不是@CodeCaster one for CultureInfo通知