DateTime解析在Windows 7中不起作用:该字符串未被识别为有效的DateTime

时间:2015-02-23 06:14:32

标签: c# datetime windows-7 datetime-parsing

在我开始解释之前,我需要告诉我已经尝试了stackoverflow中提供的所有可能的解决方案。但是在Windows 7中不起作用。

在Windows 7上解析datetime不起作用。 我尝试过以下代码片段

DateTime.ParseExact(arr[TransactionDateIndex], "M/dd/yyyy h:mm:ss tt", null);
DateTime.ParseExact(arr[TransactionDateIndex], "M/d/yyyy h:mm:ss tt",CultureInfo.InvariantCulture);
DateTime.Parse(DateTime.Parse(arr[TransactionDateIndex]).ToString("M/d/yyyy h:mm:ss tt"),CultureInfo.InvariantCulture);  

我有一个输入文件,它有一个事务日期列,它可以是任何有效的日期时间格式,现在在文件中它(MM / dd / YYYY)我需要转换为“M / d / yyyy h:mm:ss tt“format。
在XP中运行时,这段代码工作正常但在Windows 7中甚至在尝试ParseExact后显示错误 即使我使用

if (DateTime.TryParse(input, out dateTime))  
{
}

在Windows 7中运行时,很少有记录会被视为无效,但在XP中会解析相同的内容。

2 个答案:

答案 0 :(得分:0)

如果您当前的日期时间格式为MM/dd/yyyy 然后你应该使用

   string dateString = "02/15/2015"
   DateTime dateValue = DateTime.ParseExact(dateString , "MM/dd/yyyy", CultureInfo.InvariantCulture);

如果您想将其转换为您提及M/d/yyyy h:mm:ss tt之类的其他格式,则可以将.Tostring('M/d/yyyy h:mm:ss tt')添加到日期。

通过您的问题,您再次提到它可以采用任何有效的日期时间格式,如果是这样且您的cultureInfo已修复。

您可以使用以下内容,但请注意,多个格式可能能够解析相同的日期。例如,10/11/12可以解析为yyyy/MM/ddMM/dd/yyyy,它们都是有效的美国日期格式。 MM/dd/yyyy更常见,因此它首先出现在列表中,并且是下面代码返回的代码(如果您将其与美国文化一起使用而不是示例中的文化)。

 string testValue = "02/15/2015";

 DateTime result; 
 CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI"); 
 string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns();
 Console.WriteLine(String.Join("\r\n", fmts)); 
 if (DateTime.TryParseExact(testValue, fmts, ci,    DateTimeStyles.AssumeLocal, out result)) { 
      Console.WriteLine(result.ToLongDateString());   
 }

如果CultureInfo也没有修复,那么你应该获取所有可用的反文化,然后从中获取所有格式,然后解析日期时间。

答案 1 :(得分:0)

中可能存在无效日期
arr[TransactionDateIndex]

首先尝试使用硬编码日期。那么你可以使用debug.write()(windows app)或trance.write()(asp.net)通过使用System.Diagnostics中的调试类检查传递给date.parse的所有值,并检查输出窗口是否存在任何不一致的日期格式。

最后,您可以将此代码放在显示此代码的方法的顶部:

System.Threading.Thread.CurrentCulture = CultureInfo.InvariantCulture;