-3

我有一个这样的字符串:

2013 年 3 月 4 日或类似2012年 11 月 10 日。这是 mm/dd/yyyy 格式,我想将其转换为 MM/dd/yyy。我正在这样做:

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

这给我一个错误:

String was not recognized as a valid DateTime.

这里发生了什么?

编辑:

查看所有答案后,我想显示 DateTime 变量的月份和日期。

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

 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");
4

5 回答 5

5

您应该在月份和日期前添加前导零。

这样:2013 年 4 月 3 日

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");
于 2013-03-06T21:23:46.363 回答
3

请改用此模式:"M/d/yyyy"解析它和"MM/dd/yyyy"for 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

于 2013-03-06T21:33:36.227 回答
1

简单的解决方案是这样的:

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

谢谢大家的答案!

于 2013-03-06T22:09:17.907 回答
0

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

string date = "03/04/2013";
DateTime dt = Convert.ToDateTime(date); 
于 2013-03-06T21:22:43.147 回答
0
    [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,那么您需要提供这样的字符串(04/03/2013 而不是 4/3/2013)。所以要么

  • 如果您提供的日期没有前导零,请使用 M/d/yyyy
  • 或者如果您可以提供前导零,请使用 MM/dd/yyyy
于 2013-03-06T21:25:47.827 回答