我正在尝试在使用格式M/d/yyyy HH:mm:ss:fff
的时间戳上使用DateTime.ParseExact,并且编译器告诉我这不会发生。
我的时间戳示例是:
3/26/2013 14:37:05:553
...我的代码示例是,_CultureInfo是en-us。
DateTime someDateTime = DateTime.ParseExact("3/26/2013 14:37:05:553","M/d/yyyy HH:mm:ss:fff", _CultureInfo.DateTimeFormat);
见下面的图片...我错过了什么?
新修改
我还尝试了几件事但仍然没有运气:
:fff
更改为.fff
_CultureInfo.DateTimeFormat
更改为System.Globalization.CultureInfo.InvariantCulture
,并按照以下建议将d
更改为dd
您可以将以下内容投入到控制台中,然后运行以查看此操作的确切结果。
class Program
{
static void Main(string[] args)
{
CsvImporter importer = new CsvImporter();
DateTime readtime = importer.Parse(@"""3/26/2013 14:37:07:238,00:00:01.6850000,23.138,23.488,23.175""");
Console.WriteLine(readtime.ToString());
}
}
class CsvImporter
{
public Char[] _SeparatorChars = new Char[] { ',' };
public DateTime Parse(string text)
{
System.Globalization.CultureInfo _CultureInfo = System.Globalization.CultureInfo.CurrentCulture;
string txt = text.Replace('"', ' ');
string[] columns = txt.Split(_SeparatorChars);
return DateTime.ParseExact(columns[0], "M/dd/yyyy HH:mm:ss:fff", _CultureInfo.DateTimeFormat);
//return DateTime.ParseExact(columns[0], "M/dd/yyyy HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture);
}
}
答案 0 :(得分:4)
试试这个(将d
更改为dd
和CultureInfo.InvariantCulture
)
DateTime someDateTime = DateTime.ParseExact("3/26/2013 14:37:05:553", "M/dd/yyyy HH:mm:ss:fff", CultureInfo.InvariantCulture);
答案 1 :(得分:1)
问题在于string txt = text.Replace('"', ' ');
这会将column[0]
转变为[space]3/26/2013 14:37:05:553
而非3/26/2013 14:37:05:553
,就像我期望的那样。
将此行更改为string txt = text.Replace(@"""", "");
可解决问题。
答案 2 :(得分:0)
每当您致电ParseExact
时,请确保您使用的是明确的格式字符串。在.NET中,格式字符串中的/
字符是system date separator,而不是实际的斜杠。同样适用于:
字符。
要使用您的结构解析字符串,请使用反斜杠转义斜杠和冒号,例如:
DateTime.ParseExact(s, @"M\/d\/yyyy HH\:mm\:ss\:fff", null)
// or
DateTime.ParseExact(s, "M\\/d\\/yyyy HH\\:mm\\:ss\\:fff", null)
这将告诉解析器您特别需要正斜杠和冒号,而不管您的系统首选项或当前文化。