2011-08-26 30 views
2

C#タイムゾーンの日付時刻

DateTime.Now.Day Vs. DateTime.Now.Date.Day =>実際の違いは何ですか?私はPSTゾーンが言うよと言うために

、午後8時 - 私が言うのために

DateTime.Now.Day //26 
DateTime.Now.Date.Day //26 

呼び出す08/26、私は、ESTは、ゾーンと言っていたときに8 PM - 8月26日、私は

を呼び出します
DateTime.Now.Day //27 
DateTime.Now.Date.Day //27 

私は日時から日付を取得しようとしていますので、どのPST/EST/CSTタイムゾーンでも一貫性のある日を使用したいと思っています。

答えて

3

違いはありません(DateTime Structureのドキュメントを参照)。 .Dateという識別子は、作業中のオブジェクトDateTimeから時間情報を取り除くだけです。

時間が一定になるようにするには、UTC時間とDateTime.UtcNowプロパティを使用します。

+0

ありがとう、DateTime。今のところ、サーバーのコードがサーバー側のコードから来ている場合、サーバーがPSTゾーンにある場合は、PSTの日付時刻の値が渡され、ESTの場合はその逆になります。 – Sharpeye500

+1

'DateTime.Now'は、タイムゾーンに関係なく、サーバーの現在のコンピュータ/システム時間を返します。 – qJake

3

短い回答:DateTime.UtcNowを使用してください。

長い答え:表現の用語と型システムにおける

ブレイクそれを下:

DateTimeは、いくつかの静的メンバを持つ値型です。それらのメンバーの1人はNowです。 static Nowプロパティは、現在時刻の値が設定された構造体DateTimeのインスタンスを返します。しかしそれはまだDateTime型のインスタンスです。

Dateメンバは、DateTimeタイプのインスタンスで使用でき、0のタイムコンポーネントの値を含む新しいDateTimeインスタンスを返します。しかし、それはであり、まだのDateTime型のインスタンスです。

Dayメンバーは、DateTimeタイプのインスタンスで使用でき、その月の現在の日の整数を返します。

あなたはDateTime.Now.Date.DayDateTime.Now.Dayに差がある場合、すべての最初に、知ってほしいです。論理的には、あなたは存在しないと思うでしょうが、私はNowプロパティで1つのことを指摘したいと思います。それは魔法ではありません。 Nowプロパティにアクセスし、.Date.Day式を実行すると、コードが実行され、その時間が経過します。その間、元のNow値は古くなります。この表現は非常に速く、いつでもほとんどの時間がかかります—しかしゼロではありません。慎重でない場合は、競合状態を作り出すことができます。

第2に、タイムゾーンについて知り、一貫性のある日付を取得する必要があります。ここでのトリックは、あなたが実際にリストされている米国のタイムゾーンだけを気にかけているかどうか、そしてどのゾーンでも真夜中に何時でもかどうかです。しかし、実際には、DateTimeデータ型の別のメンバ、つまり.UtcNowのプロパティを調べることをお勧めします。これは、現在のタイムゾーンに関係なく、同じ値を返します。タイムゾーン全体で一貫している時間を評価するために使用できます。