-3

次のような文字列があります。

2013 年 3 月 4 日または2012 年 11 月 10日など。これは、MM/dd/yyy に変換したい mm/dd/yyyy 形式です。私はこのようにやっています:

 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"ために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
    [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年4月3日ではなく2013年4月3日)。だからどちらか

  • 指定された日付に先行ゼロがない場合は、M / d/yyyyを使用します
  • または、先行ゼロを指定できる場合は、MM / dd/yyyyを使用します
于 2013-03-06T21:25:47.827 に答える
0

ToDateTime最初に文字列を変換します。先行ゼロがあることを確認してください。

string date = "03/04/2013";
DateTime dt = Convert.ToDateTime(date); 
于 2013-03-06T21:22:43.147 に答える