C# 中的日期时间转换 - 使用格式
本文关键字:格式 转换 时间 日期 | 更新日期: 2023-09-27 18:36:03
我需要将String
转换为DateTime
格式,为此我只是尝试了
DateTime.ParseExact(DateOfBirth,"MM/dd/yyyy",CultureInfo.InvariantCulture);
当我传递像 05/30/2012
这样的值时,它工作正常。
但是,如果我尝试将该值传递为其显示错误5/30/2012
:
字符串未被识别为有效的日期时间
为了解决这个问题,我尝试了这样的
DateTime.ParseExact(String.Format("{0:MM/dd/yyyy}", DateOfBirth), "MM/dd/yyyy",
CultureInfo.InvariantCulture);
它仍然不起作用。在这里,如果我尝试String.Format("{0:MM/dd/yyyy}", DateOfBirth)
值5/30/2012
它显示相同的格式而不是05/30/2012
.
该如何解决这个问题,任何人都可以在这里帮助我...
检查此链接字符串到 C# 中的日期时间转换
使用M/d/yyyy
而不是您正在使用的格式说明符。仅使用单个M
也会将月份与前导零匹配。对于d
来说也是如此。
假设你的DateOfBirth
字符串总是用斜杠分隔,你可以尝试这样的事情:
string[] dateParts = DateOfBirth.Split('/');
DateTime.ParseExact(string.Format("{0:00}", dateParts[0]) + "/" + string.Format("{0:00}", dateParts[1]) + "/" + string.Format("{0:0000}", dateParts[2]));
我认为问题是无法识别格式字符串,因为DateOfBirth
不是DateTime
对象。因此,您可以通过自己重新格式化字符串来强制格式化
您可能对重载
感兴趣DateTime.ParseExact(DateOfBirth,
new[] { "MM/dd/yyyy", "M/dd/yyyy" },
CultureInfo.InvariantCulture,
DateTimeStyles.None);
这应该可以帮助您处理一位数和两位数的月份部分(因为5
格式MM
对您来说失败了)
由于字符串中有分隔符(即 /
),您可以这样做;
DateTime.ParseExact(DateOfBirth,"M/d/yyyy",CultureInfo.InvariantCulture);
这将解析个位数或两位数的天数/月。当你使用MM/dd/yyyy
时,你要求它们都是两位数的数字,在这种情况下,这显然不是你想要的。
尝试只用"d"而不是"MM/dd/yyyy"。
因此,该语句应该是:
var date = DateTime.ParseExact(DateOfBirth, "d", CultureInfo.InvariantCulture);
这方面的文档在这里:http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx
编辑
哎呀,我看错了文档。它应该是"M/d/yyyy"。
如果您需要使其独立于文化。
var dateTimeFormat = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentUICulture.Name).DateTimeFormat;
dateTimeFormat.ShortDatePattern =
Regex.Replace(Regex.Replace(dateTimeFormat.ShortDatePattern, "[M]+", "MM"), "[d]+", "dd");
var newDate = date.HasValue ? date.Value.DateTime.ToString("d", dateTimeFormat) : null;