目前我正在使用此代碼來獲取小時和分鐘:獲取日期和時間在.NET
DateTime currentDate = DateTime.Now.Date;
int currentHour = DateTime.Now.Date.Hour;
int currentMin = DateTime.Now.Date.Minute;
但我正在逐漸零,而不是當前的小時和分鐘。我該如何解決這個問題?
目前我正在使用此代碼來獲取小時和分鐘:獲取日期和時間在.NET
DateTime currentDate = DateTime.Now.Date;
int currentHour = DateTime.Now.Date.Hour;
int currentMin = DateTime.Now.Date.Minute;
但我正在逐漸零,而不是當前的小時和分鐘。我該如何解決這個問題?
您正在使用Date
屬性,該屬性在給定的DateTime中爲您提供午夜。你只是想現在:
請注意,我的代碼僅適用於小時分鐘調用DateTime.Now
一次,而不是一次,然後一次。這意味着如果你稱它接近(說)8 上午,你可能會得到7:59或者你可能會得到8:00 - 但你不會得到7:00或8:59,你可以得到如果你有以下任一:
// Bad option 1 (could get 7:00)
int hour = DateTime.Now.Hour;
// Imagine the clock rolls over now...
int minute = DateTime.Now.Minute;
// Bad option 1 (could get 8:59)
int minute = DateTime.Now.Minute;
// Imagine the clock rolls over now...
int hour = DateTime.Now.Hour;
你應該也考慮不使用DateTime.Now
直接的。它有兩個問題:
如果您創建一個IClock
接口或類似的東西其中有一個方法或屬性,給你當前UTC時間,你可以隨時將其轉換爲當地時間(毫不含糊地說,這不正確),並且還可以爲測試目的注入虛擬實現。
編輯:簡短而完整的程序,證明是,這個代碼真的確實工作:
using System;
public class Test
{
static void Main(string[] args)
{
DateTime now = DateTime.Now;
int hour = now.Hour;
int minute = now.Minute;
Console.WriteLine(hour);
Console.WriteLine(minute);
}
}
在我的機器,現在,該打印7,然後35.如果打印0,然後0,那麼你的機器一定是午夜。
正如你可能會注意到,我已經添加到所有繼續做這個答案的註釋。道歉,如果這看起來像垃圾郵件,但我想要得到那些回答者的注意 - 這是一個常見的錯誤,我想幫助根除。如果沒有評論,海報可能會在沒有再次查看的情況下繼續前進......
它不起作用 – 2012-03-09 07:19:54
Works for fine for我。 – 2012-03-09 07:20:53
它是如何工作的? – 2012-03-09 07:20:59
Date屬性不包含有關小時,分鐘,秒,毫秒的任何信息。只需使用DateTime.Now。
那是因爲Date
刪除了DateTime
的時間部分,所以Date.Hour
和Date.Minute
將始終爲00:00。試試這個:
DateTime currentDate = DateTime.Now.Date;
int currentHour = DateTime.Now.Hour;
int currentMin = DateTime.Now.Minute;
編輯 根據喬恩斯基特的評論,我完全同意。我只是做了最小的改變,以消除給他提出問題的問題,特別是致電.Date
。
在真實情況下,您應該使用DateTime.Now一次,首先獲取時間,然後提取所需的部分,以確保您提取的部分完全相同的時間,並且在兩者之間沒有改變。我不打算在這裏寫這些代碼,因爲這是Jon的答案的副本,所以請看他的答案以獲取詳細信息。
謝謝它適合我。 – 2012-03-09 07:22:42
反覆使用'DateTime.Now'是一個非常糟糕的主意,而不是一次評估*。詳情請參閱我的回答。 – 2012-03-09 07:27:01
我認爲將代碼放在這裏會更好,因爲這會作爲接受的答案,因此我們需要讓其他人更好地查看/查看答案。 – V4Vendetta 2012-03-09 07:35:42
應該是:
DateTime currentDate = DateTime.Now.Date;
int currentHour = DateTime.Now.Hour;
int currentMin = DateTime.Now.Minute;
請閱讀我的答案,爲什麼這個代碼是一個壞主意 - 想想如果你開始執行這個*會發生什麼,只是*在一小時的開始之前...... – 2012-03-09 07:30:22
謝謝@Jon :)你的回答很有意義。 – gideon 2012-03-09 09:38:04
的DateTime.Date
財產returns
用相同的日期作爲該實例的新對象,而時間值 設定爲12:00:00午夜(00 :00:00)。
所以完全預計你會得到所有的「時間」字段的零。
只是不要使用Date
屬性,而是直接在DateTime.Now
上調用Hour
和Minute
。
注意,獲得一致的值(和性能方面的原因),您存儲前人的精力當前DateTime.Now
結果,並在有效的:
DateTime now = DateTime.Now;
DateTime currentDate = now.Date;
int currentHour = now.Hour;
int currentMinute = now.Minute;
最後,需要注意的是,只要你不「看看「時間分數,根本沒有使用DateTime.Date
,只需使用DateTime.Now
結果即可。
儘管有標籤,但這完全與C#語言無關。這只是.NET。 (現在已修復) – 2012-03-09 07:23:08
我知道你已經有了正確的答案,但只是要知道你的問題是「DateTime.Now.Date」,你應該使用「DateTime.Now」 – 2012-03-09 10:25:54