2

我需要将 a 转换StringDateTime格式,为此我只是尝试过

DateTime.ParseExact(DateOfBirth,"MM/dd/yyyy",CultureInfo.InvariantCulture);

当我传递像05/30/2012.

但是,如果我尝试将该值作为5/30/2012显示错误传递:

字符串未被识别为有效的 DateTime

为了解决这个问题,我尝试过

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# 中检查此链接 字符串到 DateTime 转换

4

6 回答 6

2

使用M/d/yyyy而不是您正在使用的格式说明符。也只使用一个M带有前导零的匹配月份。对于d.

于 2012-06-01T07:03:33.683 回答
1

如果您需要使其与文化无关..

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;
于 2012-06-01T07:15:13.027 回答
1

尝试只使用“d”而不是“MM/dd/yyyy”。

所以,声明应该是:

var date = DateTime.ParseExact(DateOfBirth, "d", CultureInfo.InvariantCulture);

这方面的文档在这里:http: //msdn.microsoft.com/en-us/library/w2sa9yss.aspx

编辑

糟糕,我误读了文档。它应该是“M/d/yyyy”。

于 2012-06-01T06:55:36.347 回答
1

假设你的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对象。因此,您通过自己重新格式化字符串来强制格式化

于 2012-06-01T06:56:54.913 回答
1

有一个您可能感兴趣的超载

DateTime.ParseExact(DateOfBirth,
                    new[] { "MM/dd/yyyy", "M/dd/yyyy" },
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None);

这应该可以帮助您处理单个和两位数的月份部分(因为5格式对您来说是失败的MM

于 2012-06-01T07:03:22.353 回答
1

由于您的字符串中有分隔符(即/),您可以这样做;

DateTime.ParseExact(DateOfBirth,"M/d/yyyy",CultureInfo.InvariantCulture);

这将解析一位数或两位数的 days/months。当您使用 时MM/dd/yyyy,您要求它们都是两位数,在这种情况下,这显然不是您想要的。

于 2012-06-01T07:04:16.103 回答