2013-11-01 55 views
0

我想将字符串转换为DateTime。代码如下:解析自定义格式为DateTime

DateTime.Parse("20131101T210705.282Z").ToShortTimeString() 

我得到格式异常。

我尝试提供以下格式“yyyyMMddTssmmhh.fffz”但收到相同的异常。代码看起来如下

DateTime dt; 
if (DateTime.TryParseExact("20131101T210705.282Z", 
          "yyyyMMddTssmmhh.fffz", 
          new CultureInfo("en-US"), 
          DateTimeStyles.None, 
          out dt)) 
    return dt.ToShortTimeString(); 

在这种情况下,代码不会解析字符串。

回答

0

这可能是解析的方法之一。

var timeStamp = "20131101T210705.282Z"; 
    var datetime = timeStamp.Split(new[] { 'T' ,'.'}); 
    DateTime dt1; 


    if (DateTime.TryParseExact(datetime[0], 
        new string[] { "yyyyMMdd" }, 
        new CultureInfo("en-US"), 
        DateTimeStyles.None, 
        out dt1)) 
    { 
    Console.WriteLine(dt1.ToShortDateString()); 
    } 

    DateTime dt2; 


    if (DateTime.TryParseExact(datetime[1], 
        new string[] { "ssmmhh" }, 
        new CultureInfo("en-US"), 
        DateTimeStyles.None, 
        out dt2)) 
    { 
    Console.WriteLine(dt2.ToShortTimeString()); 
    } 

    Console.WriteLine(dt1.ToShortDateString() + " " + dt2.ToShortTimeString()); 
    Console.ReadLine(); 
+0

此代码的问题是无法识别时间是AM还是PM。 –

1

试试这个:

DateTime dt; 
    if (DateTime.TryParseExact("20131101T210705.282Z", 
           "yyyyMMddTssmmhh.fffZ", 
           new CultureInfo("en-US"), 
           DateTimeStyles.None, 
           out dt)) 
     return dt.ToShortDateString() + " " + dt.ToShortTimeString(); 
+0

你试过这段代码吗?我可以看到我们对TryParseExact()的参数非常相同,这意味着如果条件将会失败。 –

+0

我觉得你给TryParseExact()的错误格式为 - > 20131101T210705.282Z!= yyyyMMddTssmmhh.fffz –

+0

是的,我正在努力与格式。我使用MSDN上提供的图表做了这个。什么是正确的格式? –

0

格式根本不正确。由于所有值(小时,分钟和秒)都小于24,因此给出的时间戳值不能清楚地指示小时的位置。以下代码正常工作。

DateTime.TryParseExact(value, 
         "yyyyMMddTHHmmss.fffZ", 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, 
         out dt) 

鉴于这种专有格式,小时以24小时格式排在前面。今天上午进行的测试得出以下值:20131106T162733.032Z。我能够测试这种专有格式,因为我们为同一家公司工作。 :)