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

C#-DateTime.ParseExact()中的日期和时间转换未按预期工作,c#,.net,datetime,C#,.net,Datetime,我有日期/时间格式,例如: “2013年3月1日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

我有日期/时间格式,例如: “2013年3月1日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)
我试图在我的程序中运行以下代码,但我不断收到一个错误“字符串未被识别为有效的日期时间。”

请帮忙,我不太熟悉日期时间转换,但我看不出哪里出了问题。谢谢

更新:这是因为没有冒号就无法解析时间吗?(例如13年3月1日9:22:30被解析,但我有一个外部数据源,无法从HMMS重写为H:mm:ss)

来自:

如果格式是不包含日期或日期的自定义格式模式 时间分隔符(如“yyyyMMdd HHmm”)使用不变区域性 用于提供程序参数和每个自定义格式的最宽形式 说明符。例如,如果要在格式中指定小时 模式,指定较宽的形式“HH”,而不是较窄的形式, “H”

因此,您可以尝试:

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

你的时分和秒需要分开,因为它们没有得到区分

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

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

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

您可以确定您的日期:

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

这仍然给出了异常“字符串未被识别为有效的日期时间”。我支持Rex的评论。不管出于什么原因,我仍然得到例外这对我来说很有效。使用问题中的日期/时间和“2013年3月1日102230”进行测试。适用于所有情况。最重要的是,只要不修改源数据(如添加空格等),就很方便。谢谢
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);