2015-09-25 71 views
-2

我正在一個新的項目在C#中,我沒有日期和時間的經驗。如何找到字符串中兩個時間值的差異?

在這裏,我需要找到兩個時間值是字符串格式

string pointavalue = comboBox1.Text + ":" + comboBox2.Text + ":" + comboBox5.Text; 
string pointbvalue = comboBox3.Text + ":" + comboBox4.Text + ":" + comboBox6.Text; 
string pointcvalue = comboBox7.Text + ":" + comboBox8.Text + ":" + comboBox9.Text; 
DateTime pointa = DateTime.Parse(pointavalue, System.Globalization.CultureInfo.CurrentCulture); 
DateTime pointb = DateTime.Parse(pointbvalue, System.Globalization.CultureInfo.CurrentCulture); 
DateTime pointc = DateTime.Parse(pointcvalue, System.Globalization.CultureInfo.CurrentCulture); 
string time1 = pointa.ToString("HH:mm:ss"); 
string time2 = pointb.ToString("HH:mm:ss"); 
string time3 = pointc.ToString("HH:mm:ss"); 

有三個值pointavalue,pointbvalue之間的差異。 pointcvalue。 它們是組合字符串的組合字符串值。

現在我如何從pointavalues減去pointbvalues? 我知道它們是字符串格式,所以無法執行操作。

你正在尋找的代碼不是我的,有人幫助我,但它的工作如預期。

我在學習C#,所以忍受着我。

好的,我想找出一些東西,但我仍然無法解決它。

這是我最近與代碼

DateTime inputa = DateTime.Parse(label21.Text, System.Globalization.CultureInfo.CurrentCulture); 
     DateTime inputb = DateTime.Parse(label23.Text, System.Globalization.CultureInfo.CurrentCulture); 
if (pointa < pointb) 
     { 
      TimeSpan diff1 = pointb.Subtract(pointa); 
      DateTime d1=Convert.ToDateTime(diff1); 
      if (d1 < inputa) 
      { 
       label34.Text = "fail"; 
      } 
      else 
      { 
       label34.Text = "pass"; 
      } 

在這裏,我要檢查的時間DIFF1和inputa的條件下工作,這就是它這就是我需要完成這個項目。

+1

看看'TimeSpan' – rbm

+2

在問SO之前,你需要做基礎研究。只要簡單地搜索一下如何減去日期就可以得到結果,就像查找正在處理的類型的文檔一樣。 – Servy

+0

如果您嚴格按照一天中的時間進行操作,則.Net中最接近的數據類型是'TimeSpan',儘管它允許負值和高於24小時的值,因此您必須執行自己的邊界檢查。如果你有一個日期,那麼從'DateTime'開始,當你從彼此中減去它們時它會給'TimeSpan'。 – juharr

回答

1

爲什麼你解決不了這個問題的原因是,您要比較兩個不同的數據類型,時間跨度和日期都不盡相同

  • 要麼將​​所有的字符串爲「時間跨度」(即更好的選擇)。
  • 日期時間會給你現在的日期,但似乎你不需要這樣。
  • 最後但並非最不重要的是,在你提出這些問題之前,先學習一些基礎知識。
0

看看在DateTime.Substract method

TimeSpan abdiff = pointb.Substract(pointa); 
TimeSpan bcdiff = pointc.Substract(pointb); 

或者,你可以使用 - 運營商,你回來它包含了不同時間跨度:

TimeSpan abdiff = pointb - pointa; 
TimeSpan bcdiff = pointc - pointb; 
1

一個更簡單的例子:

void Main() 
{ 
    DateTime now = DateTime.Now; 
    DateTime yesterday = now.AddDays(-1); 
    TimeSpan difference = yesterday - now; 
    Console.WriteLine (difference.GetType().Name); 
    Console.WriteLine (difference.TotalSeconds); // expecting -86400 
} 

運行此操作將打印

TimeSpan 
-86400 
0

假設您的組合框包含小時,分鐘和秒,那麼您可以執行以下操作。

TimeSpan pointa = new TimeSpan(int.Parse(comboBox1.Text), int.Parse(comboBox2.Text), int.Parse(comboBox5.Text)); 
TimeSpan pointb = new TimeSpan(int.Parse(comboBox3.Text), int.Parse(comboBox4.Text), int.Parse(comboBox6.Text)); 
TimeSpan pointc = new TimeSpan(int.Parse(comboBox7.Text), int.Parse(comboBox8.Text), int.Parse(comboBox9.Text)); 

TimeSpan aTob = pointa > pointb 
    ? pointa - pointb 
    : (pointa + TimeSpan.FromDays(1)) - pointb; 

基本上這假定您的組合框只有有效的小時(0-23),分(0-59),二(0-59)值。那麼你只需要確定你的時間是否在同一天。如果您認爲pointapointb晚,那麼檢查它是否大於pointb意味着您可以執行直接減法。如果不是,那麼一定是第二天的時間,你只需加1天,然後減去pointb

這是基於你的斷言01:00 - 23:00應該是2小時而不是-22。如果在那裏包含日期,那麼最好是,如果時間是在同一天或次日,或者完全不同的年份,那麼您肯定會知道。

+0

同樣的結果,我甚至不知道如何在這裏解釋我的情況,你能進入teamviewer嗎?我的電子郵件是[email protected] –

+0

請我絕對不知道在時間跨度和您的答案中的代碼指出了一天,這是我的程序中的問題。 –

相關問題