2013-04-04 10 views
5

私はそうのように、カスタム形式でDateTimeを表示するための標準的な手順を承知しています:私はNULL値を受け入れるようにDateTime?DateTimeから変数を変更したとき、私は失う、しかしDateTimeがありません?.ToString(string)overload?

MessageBox.Show(dateSent.ToString("dd/MM/yyyy hh:mm:ss"));

オーバーロードの定義はToString(string)です。私はDateTime?を使用する必要があります。データベースのフィールドにNULL値がある場合、null値を持つ可能性のあるデータベースから読み取っています。その場合は変数にもnull値を割り当てる必要があります。

だから私は2つの質問があります:DateTime?ToString(string)ための過負荷が含まれていない理由がある場合

1)好奇心のうちを、誰もが知っているのですか?

2)誰でも私が達成しようとしている代替方法を提案できますか?

+4

それがnullの可能性がある可能性があるため。 'null.ToString()'とは何ですか? –

+1

'nullである可能性があるので.'は修辞的な質問ではありません。実際の問題は修辞的でもない。あなたはnull.ToString()私はそれが非常に有用だろうと思う私に教えることができる場合。 –

+0

[ToString()でnull可能なDateTimeをフォーマットするにはどうすればよいですか?](http://stackoverflow.com/questions/1833054/how-can-i-format-a-nullable-datetime-with-tostring) –

答えて

10

DateTime?Nullable<DateTime>の構文砂糖であり、それでToString(format)オーバーロードがありません。

ただし、Valueプロパティを使用して、基礎となるDateTime構造体にアクセスできます。しかし、その前に、HasValueを使用して値が存在するかどうかを確認してください。

MessageBox.Show(dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : string.Empty) 
+0

明らかに、 'DateTime'には' HasValue'の定義が含まれていませんか? –

+1

しかし、 'Datetime?'は、コンパイラによって 'Nullable 'に変換されているため、行います。 – MarcinJuraszek

+0

ああ、私は 'DateTime'と' DateTime'の間にかなりの違いがあることを学び始めています - ありがとう:) - –

1

あなたはまだ代わりに、手動でヌルチェックを毎回実行するので

variableName.Value.ToString(customFormat); 
+6

しかし、その時点で変数にnullが含まれていないことを確信している場合に限ります。 – KingCronus

+0

うんうん、私は人々がnullable型であることを理解していると仮定しました – GLlompart

+0

ええ、私はちょうど 'if(variableName!= null) 'このメソッドは同様に機能します。回避策をありがとう! +1 –

6

を使用することができ、あなたが拡張メソッドを書くことができます。

public static string ToStringFormat(this DateTime? dt, string format) 
{ 
     if(dt.HasValue) 
     return dt.Value.ToString(format); 
     else 
     return ""; 
} 

そして、(あなたが好きな文字列の形式で)このようにそれを使用

Console.WriteLine(myNullableDateTime.ToStringFormat("dd/MM/yyyy hh:mm:ss")); 
+0

これはです初めて私は拡張メソッドに遭遇しました。おそらく、私のニーズには少し残酷かもしれません(このnull可能な日時の状況は私のアプリケーションではまれな出会いです)。あなたの答えは優雅で、私にとっては学習経験です。ありがとう! +1 –

+0

@Teifi - あなたは大歓迎です:)拡張メソッドは静的クラスでなければなりません(私は多数のextメソッドを含む新しい静的クラスを作成し、プロジェクトにインポートします)。 extメソッドを作るには静的でなければならず、 'this'という言葉が必要です。最初のパラメータは影響を受けるタイプです(ここでは 'DateTime?')。これで 'DateTime?'オブジェクトがあるときに '.'を押すと通常のメソッドとextメソッドのリストが表示されます。詳細はこちらhttp://msdn.microsoft.com/en-gb/library/vstudio/bb383977.aspx型の繰り返し動作に便利です。 – keyboardP

関連する問題