DateTime
をString
としてフォーマットする方法を知っています。 DateTime
をString
としてフォーマットする方法はたくさんあるかもしれませんが、DateTime
のフォーマットに関連する質問がいくつか見つかりました。
しかし、私は2つの方法を見つけて試しました:
GetDateTimeFormats()
ToString("MM/dd/yyyy")
私はこのコードを試しました:
public static class DateTimeFormates
{
public static string FormatMyDate(this DateTime DT)
{
// My Actual Date Time Comes in this Format
//8/23/2013 12:43:12 PM
// I'm expecting Format like below
String FormatWayOne = DT.GetDateTimeFormats()[3];
//08/23/2013
String FormatWayTwo = DT.ToString("MM/dd/yyyy");
//08/23/2013
return FormatWayOne;
}
}
Global
をGlobal
としてフォーマットするDateTime
メソッドを持つString
クラスがあります。しかし、ここで私が知りたいのは、それを使用できるようにするためのベストプラクティスですか?このメソッドは、アプリケーション全体で呼び出されます。
GetDateTimeFormats
はToString
の代わりではなく、その逆も同様です。必要な形式がわかっている場合は、GetDateTimeFormats
を呼び出す必要はありません。 ToString
を使用する方が明確であるだけでなく、GetDateTimeFormats
の- document はこれを述べています(私の強調)
このメソッドはカルチャに依存するデータを使用するため、メソッドを複数回呼び出すと同じデータが返されると想定しないでください。このメソッドによって返されるデータは、現在のカルチャが変更された場合、ユーザーが個々のカルチャ設定を上書きした場合、またはシステムのカルチャデータが更新された場合に変更される可能性があります。
3番目の要素は別のカルチャで実行すると別のものになる可能性があるため、これによりコードが破損する可能性があります。
ToStringを使用することで、すべての日付形式をループする必要がなくなり(したがって、より効率的になります)、返される形式が目的の形式であることを確認しながら、どの形式が好きかを明確にすることができます。
ToStringはより明確であり、次のフレームワークバージョン/別のカルチャでは機能しない可能性があるマジックナンバーも使用していません。 ToString()
を使用します。
私はToString(format)
バージョンのみを好みます。ただし、例として示した形式ではありません。それは文化全体にあなたをねじ込むことができます。次の例を見てみましょう。
DateTime now = DateTime.Now;
string fmt1 = now.ToString("MM/dd/yyyy"); // MM/dd/yyyy
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us")
{
DateTimeFormat=
{
DateSeparator = "-"
}
};
string fmt1a = now.ToString("MM/dd/yyyy"); // MM-dd-yyyy (you're in trouble when you want to deserialize)
string fmt2 = now.ToString("MMddyyyy"); // MMddyyyy
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us")
{
DateTimeFormat =
{
DateSeparator = "-"
}
};
string fmt2a = now.ToString("MMddyyyy"); and // MMddyyyy always
GetDateTimeFormats
については、やりすぎなのでここでは触れません。
fmt1a
と言うと、MM-dd-yyyy
がMM/dd/yyyy
を返す方法を知りたいですか? /
は、現在のカルチャーのDateTimeFormatInfo.DateSeperator
を表すために使用される特殊文字であるためです。
したがって、シリアル化には/
を使用せずにカスタムフォーマットを使用し、UIにはその他のフォーマットを使用することをお勧めします。
グッドプラクティスとベストウェイのどちらか
どちらも自分のニーズに適しています。
この2つの方法の違いは?
このインスタンスの値を、標準の日付と時刻の形式指定子でサポートされているすべての文字列表現に変換します。つまり、これはコストのかかる操作であり、毎回3番目の要素を取得すると異なる結果が得られる可能性があります。すべての形式に変換する必要はないのに、なぜそうするのですか?
指定された形式を使用して、現在のDateTimeオブジェクトの値を同等の文字列表現に変換します。
提案やアイデアはありますか?
2番目のメソッド(ToString)は、必要な形式に変換するだけなので、より読みやすくなります。したがって、好ましい。一方、最初の方法を使用すると、1つだけ必要な場合に約100の形式に変換されます。
私は何年も.ToString(format)を使用してきましたが、決してがっかりすることはありません。組み込みの形式を使用することも、独自の形式をカスタマイズすることもできます。
日付のみが必要で、私が見るように、カルチャ形式が正しい場合は、datetimeメソッドToShortDateStringを使用してください。
MyDateTime.ToShortDateString();
しかし、これを拡張メソッドで使用しても意味がありません。任意の日付を任意の形式に変換して常にMM/dd/yyyyで表示する場合は、最初に設定してからカルチャを設定し、メソッドを呼び出す必要があります。
使用する適切なコードについては、こちらを確認してください http://msdn.Microsoft.com/es-es/library/system.datetime.toshortdatestring.aspx