DateTimeを変換する方法は?DateTimeへ


171

null可能なDateTime(DateTime?)をに変換したいのDateTimeですが、エラーが発生します。

タイプ「System.DateTime?」を暗黙的に変換することはできません 「System.DateTime」に。明示的な変換が存在します(キャストがありませんか?)

私は以下を試みました:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate;

回答:


304

ヌル結合演算子を使用したいまさにこの目的のために設計され。

それを使用すると、最終的にこのコードになります。

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;

1
ここで私がNULL可能日付/時刻との見解を充填プレゼンター内で使用されるスニペット: memDateLogin = m.memDateLogin ?? DateTime.MinValue
ラヴィラム

'日付時刻?' 「UpdatedDate」の定義が含まれていない
Vasil

88

MSはこのためのメソッドをすでに作成しているため、null結合演算子を使用する必要はありません。機能に違いはありませんが、専門家ではないユーザーが一目で何が起きているかを簡単に確認できます。

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);


24

単純なキャストを使用できます。

DateTime dtValue = (DateTime) dtNullAbleSource;

Leandro Tuponeが言ったように、前に変数がnullかどうかを確認する必要があります


6
+1の前に変数がnullであるかどうかを確認すると最適です
Leandro '27年

22

null可能なDateTimeのValueプロパティを呼び出す必要があります。これは、DateTimeを返します。

それUpdatedDateDateTime?であると仮定すると、これはうまくいくはずです:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;

コードを少し読みやすくするには、チェックの代わりにHasValueプロパティを使用できますnull

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
                          ? _objHotelPackageOrder.UpdatedDate.Value
                          : DateTime.Now;

これにより、さらに簡潔にすることができます。

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;


6

これは、Nullable Date / Timeでビューを埋めるPresenter内で使用したスニペットです。

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

受け入れられた回答よりもはるかに良い次の使用を検討してください

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;

なぜそれが良いのか気にしています
n4rzul


0
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;

4
通常は、提案/回答を説明するのに適した形式と見なされます。コードのみの回答は、技術的に正しい場合でも、驚くほど情報が得られない可能性があります。
Maximilian Ast 2016年

1
@MaximilianAstはい、あなたが正しいとあなたが提案した方法を実装しようとします:)
Harsh Vyas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.