无法解析格式的日期字符串,如2013-09-17T05:15:27.947

时间:2013-09-09 12:18:00

标签: c# .net parsing datetime

我正在尝试解析格式的日期:

  

2013-09-17T05:15:27.947

这是我的代码

String MessageRecieptDate = messageReceiptDate.Replace("T", " ").Remove(messageReceiptDate.Length-4);
DateTime dt = new DateTime();
IFormatProvider culture = new CultureInfo("en-US");
dt = DateTime.ParseExact(MessageRecieptDate, "dd MMM", culture);

但它每次都会给出一些格式异常。似乎我错过了一些基本的东西。

6 个答案:

答案 0 :(得分:10)

当您的日期为"dd MMM"时,我不知道您为什么使用"2014-02-03T19:00:00"作为格式字符串。有两种格式没有任何共同之处。

输入的正确格式字符串为"yyyy-MM-ddTHH:mm:ss"

string value = "2014-02-03T19:00:00";
DateTime dateValue = DateTime.ParseExact(value, "yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);

答案 1 :(得分:4)

应该做些什么:

//without ParseExact
var t1= DateTime.Parse(dt);

//you don't know how many milliseconds will be in your string, 
//and want absolutely use ParseExact anyway
var t2= DateTime.ParseExact(dt.PadRight(27, '0'), "o", culture);

//you know you'll always have 3 chars for milliseconds.
var t3= DateTime.ParseExact(dt, "yyyy-MM-ddTHH:mm:ss.fff", culture);

答案 2 :(得分:3)

Marcin's answers非常正确,但我想指出问题的根源。

当你写作时,

string MessageRecieptDate = messageReceiptDate.Replace("T", " ").Remove(messageReceiptDate.Length-4);

实际上,你删除了很多字符串。在此行之后,您的字符串就像;

2014-02-03 19:0

尝试使用Remove(messageReceiptDate.Length - 3);代替。这将使您的字符串2014-02-03 19:00正是我们想要的。

然后,您应该使用与yyyy-MM-dd HH:mm完全匹配的2014-02-03 19:00格式。

string messageReceiptDate = "2014-02-03T19:00:00";
string MessageRecieptDate = messageReceiptDate.Replace("T", " ").Remove(messageReceiptDate.Length - 3);
IFormatProvider culture = new CultureInfo("en-US");
DateTime dt = DateTime.ParseExact(MessageRecieptDate, "yyyy-MM-dd HH:mm", culture);
Console.WriteLine(dt);

输出将是;

2/3/2014 7:00:00 PM

这是DEMO

答案 3 :(得分:2)

您的字符串格式完全错误:

您需要指定与输入字符串匹配的格式,即:"yyyy-MM-ddTHH:mm:ss"

 string MessageReceiptDate = "2014-02-03T19:00:00";
 var datex = DateTime.ParseExact(MessageReceiptDate, "yyyy-MM-ddTHH:mm:ss", culture);

答案 4 :(得分:2)

使用DateTime.TryParseExact

DateTime dateValue;
string dateString = "2013-09-17T05:15:27.947";
string[] formats= {"yyyy-MM-ddTHH:mm:ss"};
if(DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
{
   //parsing successful
}

答案 5 :(得分:1)

这一行:

dt = DateTime.ParseExact(MessageRecieptDate, "dd MMM", culture);

的日期格式错误。

应该是这样的:

dt = DateTime.ParseExact(MessageRecieptDate, "yyyy-MM-ddTHH:mm:ss", culture);