1

日時のリストをフォーマットしようとしています。1つの日付は私が提供したものと同じ形式ですが、要素は適切ではありません。そのコード行を以下に示します。誰かが以下の行のエラーをスキップする方法を教えてもらえますか?

Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd");
4

4 に答える 4

6

そもそも使用は避けたいと思いConvert.ToDateTimeます。DateTime.TryParseまたは(できれば)を使用することをお勧めしDateTime.TryParseExactます。これらは両方とも、変換が成功したかどうかを示す値を返すため、不良データをスキップするために例外のキャッチを開始する必要はありません。例えば:

DateTime parsed;
if (DateTime.TryParse(text, out parsed))
{
    string reformatted = parsed.ToString("yyyy-MM-dd");
    // Use reformatted
}
else
{
    // Log error, perhaps?
}

複数の可能な形式がある場合は、1回の呼び出しで複数の形式を指定できるオーバーロードの使用TryParseExactを検討する必要があります。

形式だけでなく、使用するカルチャも考慮する必要があります。上記のコード(およびコード)では、実行中のスレッドのカルチャを使用します。それはいつもあなたが望むものですか?カルチャはあらゆる種類のものに影響を与える可能性があります。通常、カスタム形式を指定する場合は、不変のカルチャを使用する必要があります。そうしないと、たとえば、グレゴリオ暦以外のカレンダーを予期せず使用してしまう可能性があります...

編集:入力が常に次の形式dd-MM-yyyyである場合は、おそらく次を使用する必要があります。

DateTime parsed;
if (DateTime.TryParseExact(text, "dd-MM-yyyy", CultureInfo.InvariantCulture,
                           DateTimeStyles.Default, out parsed))
{
    string reformatted = parsed.ToString(CultureInfo.InvariantCulture,
                                         "yyyy-MM-dd");
    // Use reformatted
}
else
{
    // Log error, perhaps?
}
于 2013-01-22T10:37:33.730 に答える
2

Convert.ToDateTime使用する代わりにDateTime.ParseまたはDateTime.ParseExact

ParseExactフォーマットをより細かく制御できるので、次に例を示します。

DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

TryParseExact解析エラーを適切に処理できるようにするバリアントもあります。

于 2013-01-22T10:36:45.380 に答える
0

DateTime.ParseExact()の代わりにメソッドを使用してみてください。

日付と時刻の指定された文字列表現を同等のDateTimeに変換します。

public static void Main(string[] args)
{

    Console.WriteLine(DateTime.ParseExact("22-01-2013 00:00:00", "dd-MM-yyyy HH:mm:ss", CultureInfo.CurrentCulture).ToString("yyyy-MM-dd"));

}

これがDEMOです。

Coding Best Practices Using DateTime in the .NET Frameworkまた、すべての.NET開発者が読むべきだと思うものも確認してください。

于 2013-01-22T10:37:09.383 に答える
0

試してみてください:

DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

このようにして、日付文字列の正確な形式を指定できます。

于 2013-01-22T10:40:46.387 に答える