我正在尝试将字符串从文本文件转换为DateTime,但我得到了奇怪的结果。在一台计算机上,它可以工作,但另一台,它没有。我如何在所有计算机上完成这项工作?在我的最后一个问题上,你说要添加文化的东西,它工作了几分钟,但它现在不再工作了。继承我的代码:
string[] stringArray = File.ReadAllLines("C:\\Program Files\\PointOfSales\\RecordTotals.txt");
int lines = stringArray.Length;
for (int i = 0; i < (lines / 5); i++)
{
TransactionList.Add(new Transaction
{
TotalEarned = Convert.ToDouble(stringArray[(i * 5)]),
TotalCost = Convert.ToDouble(stringArray[(i * 5) + 1]),
TotalHST = Convert.ToDouble(stringArray[(i * 5) + 2]),
Category = stringArray[(i * 5) + 3],
HoursSince2013 = Convert.ToDateTime(stringArray[(i * 5) + 4], CultureInfo.InvariantCulture)
});
}
我收到错误String was not recognized as a valid DateTime.
有什么线索吗?谢谢!
修改:使用MessageBox.Show(stringArray[(i * 5) + 4]);
我得到26/10/2013 11:58:03 AM
编辑:为什么这不能将当前时间转换为正确的文化?
DateTime Today = DateTime.Now;
Today = DateTime.ParseExact(Today.ToString(), "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
答案 0 :(得分:1)
在该系统上,您的字符串不是不变文化中的有效日期:26/10/2013 11:58:03 AM
。不变文化预计月/日/年,而不是日/月/年。
您应指定用于生成您正在阅读的文件的相同文化。您需要有一些方法来确定或标准化用于写入文件的文化,以及从中读取文件。
编辑:为什么这不能将当前时间转换为正确的文化?
如果您当前的文化不使用dd/MM/yyyy
格式,则会失败。 Today.ToString()
没有指定文化或格式,因此它会在美国系统上使用MM/dd/yyyy
格式写出来,这会导致调用失败。
在您的情况下,我建议您始终使用相同的文化进行阅读和写作 - 如果您使用以下代码编写文件:theDate.ToString(CultureInfo.InvariantCulture)
,那么您可以使用Convert.ToDateTime(theString, CultureInfo.InvariantCulture)
进行阅读,并且可以正常工作在任何系统上,因为相同的规则(不变文化)用于写作和阅读。
答案 1 :(得分:0)
您应该使用InvariantCulture
之类的自定义"dd/MM/yyyy HH:mm:ss t"
格式;
string s = "26/10/2013 11:58:03 AM";
DateTime dt = DateTime.ParseExact(s, "dd/MM/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
Console.WriteLine(dt);
输出将是;
10/26/2013 11:58:03 AM
这里有 demonstration
。
有关更多信息,请查看;
编辑:如果您的DateTime.Now
格式不合适"dd/MM/yyyy HH:mm:ss tt"
,您的程序将失败。您应该在InvariantCulture
格式的所有程序中使用DateTime.Now
。