7

我有日期/时间格式,例如:“1-Mar-13 92230”根据这个文件这个链接,格式如下:“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)

我试图在我的程序中运行以下代码,但我不断收到“字符串未被识别为有效日期时间”的错误。

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

4 回答 4

5

你可以确定你的日期:

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);
于 2013-08-22T09:23:58.673 回答
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);
于 2013-08-22T09:22:27.797 回答
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);
于 2013-08-22T09:23:22.157 回答
0

您的小时分钟和秒需要分开,因为它们没有得到区分。

string input = "1-Mar-13 9 23 30";
        var date = DateTime.ParseExact(input, "d-MMM-yy H mm ss",   System.Globalization.CultureInfo.CurrentCulture);
于 2013-08-22T09:23:15.947 回答