C#-DateTime.ParseExact()中的日期和时间转换未按预期工作
我有日期/时间格式,例如: “2013年3月1日92230” 根据,格式如下: “d-MMM-yy Hmmss”,因为: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
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);