在我开始解释之前,我需要告诉我已经尝试了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中会解析相同的内容。
答案 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/dd
或MM/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;