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# 中的日期时间转换

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;