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

本文关键字:字符串 日期 2013-09-17T05 格式 | 更新日期: 2023-09-27 18:30:37

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

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);

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

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

我不知道

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

输入的正确格式字符串"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);

应该工作:

//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);

好吧,马尔钦的回答非常正确,但我想指出你问题的根源。

当你写作时,

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

实际上,你在字符串上删除了太多。在这一行之后,你的字符串会像;

2014-02-03 19:0

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

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

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

这是一个演示

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

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

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

使用 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
}

这一行:

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

日期格式错误。

它应该是这样的:

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