字符串未被识别为有效的日期时间
本文关键字:日期 时间 有效 识别 字符串 | 更新日期: 2023-09-27 18:30:48
我尝试将字符串转换为datetime
但每次我得到:
字符串未被识别为有效的日期时间。
代码是:
string format = "dd/MM/yyyy";
obj.TransDate = DateTime.ParseExact(lbl_TransDate.Text.Split('/')[0] + "/" + lbl_TransDate.Text.Split('/')[1] + "/" + lbl_TransDate.Text.Split('/')[2], format, CultureInfo.InvariantCulture);
当我调试我尝试解析的日期时,它是:12/4/2012
所需的格式是
string format = "dd/M/yyyy";
不过我什么都不明白,为什么要拆分连接字符串,因为你会得到同样的东西?
如果输入是 12/4/2012,则在拆分为"/"后,您将获得 12, 4, 2012,然后将它们连接回来以获得"12/4/2012"。为什么会这样?
此外,如果您确实需要拆分,则可以存储到数组中,这样就不需要拆分 3 次:
var splits = lbl_TransDate.Text.Split('/');
DateTime.ParseExact(splits[0] + "/" + splits[1] + "/" + splits[2], ...);
如果您不信任输入,则拆分数组可能不是 Length = 3,并且更多,您可以使用 DateTime.TryParseExact
编辑 您可以使用多种格式的重载因此,如果输入可能是 12/4/2012 或 12/04/2012,则可以同时提供两种格式
var formats = new[] {"dd/M/yyyy","dd/MM/yyyy"};
var date = DateTime.ParseExact("12/4/2012", formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AssumeLocal);
我同意其他答案,看起来你做了很多工作来解决应该是一个简单的问题。我会使用区域性信息中的英国日期格式。
var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat);
当您只有一个数字时,您指定MM
。要么只使用一个M
,要么使用PadLeft
函数填充零。
以下代码演示了这一点,并根据需要填充dd
和MM
string format = "dd/MM/yyyy";
string mydate = "12/4/2012";
DateTime t = DateTime.ParseExact(mydate.Split('/')[0].PadLeft(2,'0') + "/" +
mydate.Split('/')[1].PadLeft(2,'0') + "/" +
mydate.Split('/')[2], format, CultureInfo.InvariantCulture);
输出为:
12/04/2012 00:00:00
确保在 Web 配置中添加以下内容
<system.web>
<globalization culture="en-AU"/>...
有关正确的区域性国家/地区代码,请参阅以下内容
http://sharpertutorials.com/list-of-culture-codes/