无法解析格式为 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);
但它每次都会给出一些格式例外。似乎我错过了一些基本的东西。
我不知道
为什么当你的日期"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);