2013-08-23 9 views
10

DateTimeStringとしてフォーマットする方法を知っています。 DateTimeStringとフォーマットする方法はたくさんありますが、DateTimeの書式設定に関連する質問はほとんど見つかりませんでした。私はGlobal方法にしてGlobalクラスを持つToString()またはGetDateTimeFormats()を使用してDateTimeをフォーマットする必要がありますか?

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; 
    } 
} 

  1. GetDateTimeFormats()
  2. ToString("MM/dd/yyyy")が、私はこのコードを試してみました:

    しかし、私が発見し、2つの方法を試してみましたフォーマットa DateTimeStringとなります。しかしここで私はどの方法がベストプラクティスなのかを知りたいので、私はそれを使うことができますか?このメソッドは、アプリケーション全体で呼び出されます。

+2

を使用するために適切なコードのために、ここでチェック。 'Long(Ticks)'として格納されます。 'DateTime'の文字列表現は、 –

+4

の形式しか持たず、' DateTime.GetDateTimeFormats'について聞いたことがありません。 –

答えて

8

GetDateTimeFormatsToStringの代わりではなく、その逆もありません。あなたが望むフォーマットが分かっているなら、GetDateTimeFormatsに電話する必要はありません。だけでなく、それがこの(強調鉱山)ToStringdocumentGetDateTimeFormatsのための状態を使用することが明確であること

この方法は、文化に敏感なデータを使用しているため、あなたは、メソッドへの複数の呼び出しが同じで返すこと を仮定するべきではありませんデータ。この方法で返されたデータ は、現在のカルチャが変更されたり、 ユーザーが個々の文化的な設定を上書きしたり、システムの文化データ に更新が行われた場合に変更される可能性があります。

これは、別のカルチャで実行されたときに3番目の要素が何かになる可能性があるため、コードが破損する可能性があります。

ToStringを使用すると、すべての日付形式をループする必要がなくなり、より効率的になります。また、返される形式が望ましいものであることを保証しながら、好きな形式を明確にしています。

+1

が真です。あなたが欲しいものを知っているなら、それを呼んでください。バケットをフェッチしてからそれを選択する必要はありません。 – no9

6

ToStringはより明確で、次のフレームワークバージョン/別のカルチャでは機能しないマジックナンバーも使用しません。 ToString()を使用してください。

3

グッドプラクティスや

どちらもベストな方法は、自分たちのニーズのために良いどちらにしていますさ。

この2つの違いはありますか?

GetDateTimeFormats()

標準日時フォーマット指定でサポートされているすべての文字列表現に、このインスタンスの値を変換。つまり、それは高価な操作であり、毎回3番目の要素を取得することで異なる結果が得られる可能性があります。すべての形式に変換する必要はありません。その理由は何ですか?

ToString()

指定されたフォーマットを使用して、同等の文字列表現に現在のDateTimeオブジェクトの値を変換。

任意の提案や考え方?

2番目のメソッド(ToString)は必要な形式に変換されるだけで、読みやすくなります。したがって、より好ましい。一方、最初の方法を使用する場合は、1つしか必要ない場合は約100の形式に変換されます。

2

私は長年にわたって.ToString(形式)を使用してきました。それは決して私を失望させません。組み込みの形式を使用することも、独自の形式をカスタマイズすることもできます。

3

私は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ここで、それはやり過ぎであるので、話をするつもりはありません。

あなたがMM/dd/yyyyと言うとき、fmt1aMM-dd-yyyyを返す方法をお考えですか? /は現在の文化のDateTimeFormatInfo.DateSeperatorを表すために使用される特殊文字です。

したがって、シリアル化やその他のUIの書式設定には/を付けずにカスタム書式を使用することをおすすめします。

2

は日付のみをしたい場合は、私が見るように、文化の形式が正しいか、単に日時法ToShortDateString

MyDateTime.ToShortDateString(); 

を使用しかしextesion方法でこれを使用すると、任意の意味がありません。任意の形式の日付を常にMM/DD/YYYY形式で変換する場合は、最初にcultureを設定し、メソッドを呼び出す必要があります。

FYI `DateTime`はどのような形式を持っていないhttp://msdn.microsoft.com/es-es/library/system.datetime.toshortdatestring.aspx

+0

これも一方通行だと私は同意します。 – RajeshKdev

+0

スペルミスを修正するために編集されました – Gonzix

関連する問題