C#中的日期和时间转换 - DateTime.ParseExact()无法按预期工作

时间:2013-08-22 09:15:38

标签: c# .net datetime

我有日期/时间格式,例如:  " 1-Mar-13 92230" 根据{{​​3}}和this document,格式如下: " d-MMM-yy Hmmss",因为:

Day is single digit, 1-30
Month is 3 letter abbreviation, Jan/Mar etc.
Year is 2 digits, eg 12/13
Hour is single digit for 24 hour clock, eg 9, 13 etc. (no 09)
Minute is standard (eg 01, 52)
Second is standard (eg 30, 02)

我试图在我的程序中运行以下代码,但是我一直收到错误#34; String未被识别为有效的DateTime。"

string input = "1-Mar-13 92330";
        var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.CurrentCulture);

请帮忙,我对DateTime转换不太熟悉,但我无法看到我在这里出错的地方。谢谢!

更新:这是因为在没有冒号的情况下无法解析时间吗? (例如1-Mar-13 9:22:30被解析,但我有一个外部数据源,无法从Hmmss重写为H:mm:ss)

4 个答案:

答案 0 :(得分:4)

您可以修改日期:

var parts = "1-Mar-13 92230".Split(' ');

if (parts[1].Length == 5)
{
    parts[1] = "0" + parts[1];
}

var newDate = parts[0] + " " + parts[1];

var date = DateTime.ParseExact(newDate, "d-MMM-yy HHmmss",  System.Globalization.CultureInfo.CurrentCulture);

答案 1 :(得分:3)

来自msdn

  

如果format是自定义格式模式,不包含日期或   时间分隔符(例如“yyyyMMdd HHmm”),使用不变的文化   提供者参数和每种自定义格式的最宽格式   符。例如,如果要以格式指定小时数   模式,指定更宽的形式,“HH”,而不是更窄的形式,   “H”。

所以你可以尝试:

string input = "1-Mar-13 92330";
        var date = DateTime.ParseExact(input, "d-MMM-yy Hmmss", 
System.Globalization.CultureInfo.InvariantCulture);

答案 2 :(得分:1)

您的输入字符串必须是以下格式

string input = "1-Mar-13 092330";

如果你回到你的链接,它会说

H   24-hour clock hour (e.g. 19)

现在H是24小时,它应该以前导0表示。如果不能想象你将如何处理小于9的小时数,即两位数。

如果不是,你的小时和分钟和秒必须分开。

string input = "1-Mar-13 9 2330";

var date = DateTime.ParseExact(input, "d-MMM-yy H mmss", 
System.Globalization.CultureInfo.InvariantCulture);

答案 3 :(得分:0)

你的小时分和秒需要分开,因为它们没有被区分。

string input = "1-Mar-13 9 23 30";
        var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss",   System.Globalization.CultureInfo.CurrentCulture);