我尝试将字符串转换为datetime
但每次都得到:
字符串未被识别为有效的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
答案 0 :(得分:9)
所需的格式是
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], ...);
如果你不信任输入,splits数组可能不是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);
答案 1 :(得分:2)
我同意其他答案,看起来你做了很多工作来解决应该是一个简单的问题。我会使用文化信息中的英国日期格式。
var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat);
答案 2 :(得分:1)
当您只有一位数字时,您正在指定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
答案 3 :(得分:1)
确保在网络配置中添加以下内容
<system.web>
<globalization culture="en-AU"/>...
有关正确的文化国家/地区代码,请参阅以下内容