7

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

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

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

4

6 回答 6

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);
于 2013-09-09T12:21:48.087 回答
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);
于 2013-09-09T12:32:51.650 回答
3

好吧Marcin 的回答非常正确,但我想指出您问题的根源。

写的时候,

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

于 2013-09-09T12:32:40.033 回答
2

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

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

 string MessageReceiptDate = "2014-02-03T19:00:00";
 var datex = DateTime.ParseExact(MessageReceiptDate, "yyyy-MM-ddTHH:mm:ss", culture);
于 2013-09-09T12:22:59.603 回答
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
}
于 2013-09-09T12:27:04.480 回答
1

这一行:

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

日期格式错误。

它应该是这样的:

dt = DateTime.ParseExact(MessageRecieptDate, "yyyy-MM-ddTHH:mm:ss", culture);
于 2013-09-09T12:23:35.970 回答