2014-09-23 42 views
-1

這個問題對某些人來說可能看起來很簡單,但它讓我的思緒完全困惑 - 我對C#有點新手。如何用DateTime.Now()執行計算

的設置:

試圖爲「報警」的基礎應用做DateTime.Now()計算。

問題:

我有一個label,它顯示當前時間。 我有一個Masked Text box,他/她設置鬧鐘時接受用戶輸入。

我正在嘗試做一個計算,據此我會添加另一個label顯示一個人還在睡覺的時間。

其中,在概念上,應該是這個樣子

TimeLeftToSleep(lbl) = CurrentAlarmTime-DateTime.Now() 

它雖然不斷給一個錯誤,試圖解析,但我似乎無法得到它的工作它產生的誤差是一個長期的線:

Operator '-' cannot be applied to operands of type 'string' and 'System.DateTime'. 
+5

'CurrentAlarmTime'是一個字符串.... – leppie 2014-09-23 11:07:18

+1

下一次,請仔細閱讀您的錯誤消息**更仔細**。 – 2014-09-23 11:14:36

+0

嘗試發佈實際的代碼 – krisdyson 2014-09-23 12:13:12

回答

-1

您應該使用DateTime類方法減爲:

var date2 = DateTime.Parse(DateTime.Now.ToShortDateString() + " 10:00"); 
System.TimeSpan diff1 = date2.Subtract(DateTime.Now); 
+0

這裏有什麼不對嗎? – codebased 2014-09-23 11:21:41

+0

我明白了*所有*時間 – krisdyson 2014-09-23 12:12:14

0

你柯倫tAlarmTime必須是DateTime類型。 DateTime有許多構造函數和解析方法,這不應該是一個問題。

另外DateTime.Now是一個屬性,擺脫括號。

我會做這樣的事情:

(CurrentAlarmTime - DateTime.Now).Ticks 

和使用蜱值以得到一個時間跨度。

+0

DateTime - DateTime已經是TimeSpan了,所以不需要獲取刻度然後再將刻度轉化爲TimeSpan。 – Dirk 2014-09-23 11:12:22

+0

Doh,忘了那個。感謝您的糾正! – Filip 2014-09-23 11:13:30

0

看來你的CurrentAlarmTime是一個字符串 - 我認爲這是用戶輸入的文本。爲了對此值執行日期數學,您需要先使用DateTime.Parse()方法將其轉換爲DateTime。

var parsedCurrentAlarmTime = DateTime.Parse(CurrentAlarmTime); 
+0

所以我試過你發佈的內容,它不允許我將標籤轉換爲字符串 - 我知道我可能會丟掉一些愚蠢的東西,但是是的...發生這個錯誤:參數1:不能從'System.Windows.Forms.Label'轉換爲'string'。正如我所提到的,存儲在「CurrentAlarm」標籤中的值引發了問題,我是否應該刪除該標籤並添加一個文本框? – 2014-09-23 11:28:08

1

TextBox.Text提供一個字符串,你應該首先將其解析到一個DateTime做任何計算它。

DateTime result; 

if (DateTime.TryParse(textbox1.Text, out result)) 
{ 
    // the delta between two datetimes is a timespan. 
    TimeSpan delta = result - DateTime.Now; 

    // show the timespan within the label. 
    TimeLeftToSleep.Text = delta.ToString(); 
} 
else 
{ 
    // the textbox doesn't contain a valid datetime. 
} 

有關時間跨度的詳細信息:用於DateTime.TryParse方法http://msdn.microsoft.com/en-us/library/ee372286(v=vs.110).aspx 這裏:http://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx

+0

也試過這個,和Sasse的建議一樣,不能將標籤轉換爲字符串。 – 2014-09-23 11:37:27

+0

您可以嘗試標籤的「Text」屬性。 _Looks like a school assignment_ **; - )** – 2014-09-23 13:06:12

0

它看起來像你的CurrentAlarmTime是一個字符串。你可以使用DateTime.Parse從它得到一個DateTime,然後你的減法應該工作(併產生一個TimeSpan對象)。

此外,DateTime.Now是一個屬性,而不是一個方法。之後你不需要(也不應該)寫()。

0

您的代碼中存在一些錯誤。 DateTime.Now是一個屬性,所以刪除括號。您的CurrentAlarmTime屬於「string」類型,因此您需要先將其轉換爲DateTime。

請看下面的例子(這是不完整的,不是很好,但應該給你的,你應該做些什麼的想法):

,因爲用戶編輯沒有兩個文本框。

int hour = 0; 
int minute = 0; 

try 
{ 
    hour = int.Parse(this.AlarmTextBox.Text.Split(':').First()); 
    minute = int.Parse(this.AlarmTextBox.Text.Split(':').Last()); 
} 
catch 
{ 
} 

var currentAlarmTime = DateTime.Today.AddHours(hour).AddMinutes(minute); 
var timeLeftToSleep = currentAlarmTime - DateTime.Now; 

this.timeLeftToSleepLabel.Text = string.Format("{0}:{1}", timeLeftToSleep.TotalHours, timeLeftToSleep.Minutes); 
+0

嗯..問題是我的值存儲在已經包含小時和分鐘的標籤中,所以我不明白爲什麼我需要創建兩個單獨的變量幾分鐘和幾小時,因爲這兩個值都存儲在標籤和一個Masked Text框中,它們就像兩個不同的項目。 – 2014-09-23 11:33:49

+0

我不明白你的意思,但我已經更新了我的答案,從一個文本框中獲得小時和分鐘。如果你能以更好的方式獲得價值觀,那麼我的回答更能讓你看到如何做到這一點,以便你可以在特定情況下做到這一點。 =) – Sasse 2014-09-23 11:40:28

+0

也許你應該做一些像maskedTextBox.Text.Substring(0,2)和maskedTextBox.Text.Substring(2,2)來獲得小時和分鐘。 – Sasse 2014-09-23 11:42:34