2011-08-26 156 views
2

在C#中時區的日期時間

DateTime.Now.Day比。 DateTime.Now.Date.Day =>實際區別是什麼?

對於比方說,當我PST區說,晚上8點 - 08/26,當我打電話

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

對於比方說,當我EST區說,晚上8點 - 08/26,當我打電話

DateTime.Now.Day //27 
DateTime.Now.Date.Day //27 

我想從日期時間或日期中獲取日期,以便我想在任何PST/EST/CST時區中使用一致的日期,任何想法?

回答

3

絕對沒有區別(請參閱DateTime Structure文檔)。 .Date標識符只是從您正在使用的DateTime對象中刪除時間信息。

如果您想要一致的時間,請使用UTC時間和DateTime.UtcNow屬性。

+0

謝謝,日期時間。現在 - >如果這段代碼來自服務器端代碼,比如說服務器是否在PST區域,它會給出PST日期時間值,反之亦然? – Sharpeye500

+1

'DateTime.Now'給出服務器的當前計算機/系統時間,不管它在什麼時區,是的。 – qJake

3

簡答題:使用DateTime.UtcNow

龍答:

打破它在表達式中的條款和類型系統:

DateTime是值類型與幾個靜態成員。其中一名成員是Now。靜態的Now屬性返回填充了當前時間值的DateTime結構的實例。但它仍然是一個DateTime類型的實例。

Date成員可用於DateTime類型的實例,並返回一個新的DateTime實例,其中時間分量的值爲零。但它的仍然是只是一個DateTime類型的實例。

Day成員可用於DateTime類型的實例,並返回該月當前日期的整數。

想要知道,首先,如果DateTime.Now.Date.DayDateTime.Now.Day之間有差異。從邏輯上講,你會認爲沒有,但我確實想指出Now財產上的一件事情:這不是魔術。代碼將在您訪問Now屬性並執行.Date.Day表達式後運行,並且因此時間過去。在此期間,原來使用的Now值變得陳舊。這個表達非常快,幾乎不需要任何時間,但它不是零。如果你不小心,你可能會創造一個競爭條件。

其次,你想知道時區和獲得一致的日期。這裏的訣竅是,你是否真的只關心列出的美國時區,以及你是否有任何時間在任何區域的午夜附近。但最好的選擇是查看DateTime數據類型的另一個成員:它的屬性爲.UtcNow。無論您在哪個時區,這將返回相同的值。您可以使用它來評估在所有時區內保持一致的時間。