字符串到MM/dd/yyyy

本文关键字:dd yyyy MM 字符串 | 更新日期: 2023-09-27 18:02:43

我有一个这样的字符串:

2013年4月3日或类似的情况2012年10月11日

 DateTime publicationDate = DateTime.ParseExact(myDate, "MM/dd/yyyy", CultureInfo.InvariantCulture);

这给我带来了一个错误:

String was not recognized as a valid DateTime.

这是怎么回事?

编辑:

复习完所有答案后,我想显示DateTime变量的Month和Day。

所以我不能做这样的事情:

 string publicationDate = DateTime.ParseExact(myDate, "M/d/yyyy", CultureInfo.InvariantCulture).ToString("MM/dd/yyyy");

有一个字符串不会解决我的问题,因为我使用这个变量只显示日期和月份。当我尝试将此"publicationDate">解析回DateTime时,它截断了月份和日期中的"0"。

希望我在这里表明了我的观点。

回答:

string publicationDate = DateTime.ParseExact(myDate, "M/d/yyyy", CultureInfo.InvariantCulture).ToString("MM/dd");

字符串到MM/dd/yyyy

您应该将前导零添加到月份和日期中。

这种方式:2013年3月4日

var myDateTime = DateTime.ParseExact(
                     "03/04/2013", 
                     "MM/dd/yyyy", 
                     System.Globalization.CultureInfo.InvariantCulture);

如果前导零是一个问题,那么执行:

var myDateTime = DateTime.ParseExact(
                     "3/4/2013", 
                     "M/d/yyyy", 
                     System.Globalization.CultureInfo.InvariantCulture);

最后,如果您想添加前导零:

string myFormattedDateTime = DateTime.ParseExact(
                                "3/4/2013", 
                                "M/d/yyyy", 
                                System.Globalization.CultureInfo.InvariantCulture)
                             .ToString("MM/dd/yyyy");

使用此模式:"M/d/yyyy"解析它,"MM/dd/yyyy"解析ToString:

DateTime publicationDate = DateTime.ParseExact(dt, "M/d/yyyy", CultureInfo.InvariantCulture);
// if you want to display two digits for day and month:
Console.WriteLine(publicationDate.ToString("MM/dd/yyyy"));

正如你在这里看到的,它对两者都有效:http://ideone.com/M7luBD

简单的解决方案是:

string publicationDate = DateTime.ParseExact(myDate, "M/d/yyyy", CultureInfo.InvariantCulture).ToString("MM/dd");

谢谢大家的回答!

首先转换字符串ToDateTime。确保你有前导零。

string date = "03/04/2013";
DateTime dt = Convert.ToDateTime(date); 
    [TestCase("3/4/2013", 3, 4, 2013)]
    [TestCase("11/4/2013", 11, 4, 2013)]
    public void DateTest(string date, int month, int day, int year)
    {
        var publicationDate = DateTime.ParseExact(date, "M/d/yyyy", CultureInfo.InvariantCulture);
        Assert.AreEqual(day, publicationDate.Day);
        Assert.AreEqual(month, publicationDate.Month);
        Assert.AreEqual(year, publicationDate.Year);
    }

两个测试用例都通过。


如果您的格式要求MM/dd/yyyy,那么您需要提供这样的字符串(2013年3月4日,而不是2013年4月3日(。所以要么

  • 如果您提供的日期没有前导零,请使用M/d/yyyy
  • 或者如果可以提供前导零,则使用MM/dd/yyyy