2009-09-28 216 views
31

我有兩個蒙面的文本框控件,並想知道如何去獲取每個時間,然後將差異轉換爲毫秒。就像在tb1中寫的,我寫「12:01」,在tb2中寫「12:02」,然後點擊一個按鈕。一旦按鈕被點擊,它啓動一個計時器,並在12:02顯示一個消息框。除了時間轉換部分外,我知道如何去做所有的事情。將2倍轉換爲毫秒之差?

如何實現?

+1

您的問題不清楚。你不知道如何獲得兩個DateTime之間的差異或如何將「12:01」轉換爲DateTime? – 2009-09-28 14:01:12

回答

82
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text); 
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text); 
TimeSpan span = dt2 - dt1; 
int ms = (int)span.TotalMilliseconds; 
10

要回答這個冠軍的問題:

DateTime d1 = ...; 
DateTime d2 = ...; 
TimeSpan diff = d2 - d1; 

int millisceonds = (int) diff.TotalMilliseconds; 

您可以使用此設置一個計時器:

timer1.interval = millisceonds; 
timer1.Enabled = true; 

處理蜱時,切勿忘記關閉計時器。

但是如果你想要一個事件 12:03,剛剛替補DateTime.Now爲d1

但不清楚textBox1和textBox2的確切功能是什麼。

+1

您需要使用TotalMilliseconds,而不是毫秒。 – MusiGenesis 2009-09-28 14:11:22

+1

您需要「TotalMilliseconds」而不是「毫秒」 毫秒將僅給出時間差的毫秒「餘數」,而不是整個時間跨度。 2.475秒給出毫秒= 475,總毫秒= 2475 – StarPacker 2009-09-28 14:14:07

+0

是的,已更正。 Darn TimeSpan界面。 – 2009-09-28 14:15:10

5

你必須文本框的值轉換爲日期時間(T1,T2),則:

DateTime t1,t2; 
t1 = DateTime.Parse(textbox1.Text); 
t2 = DateTime.Parse(textbox2.Text); 
int diff = ((TimeSpan)(t2 - t1)).TotalMilliseconds; 

或者使用DateTime.TryParse(TextBox1中,從T1); 錯誤處理由您決定。

+0

從大腦記憶:))) – 2009-09-28 14:04:34

+1

你第一次是對的:你需要使用TotalMilliseconds(除非你喜歡每次都返回0)。 – MusiGenesis 2009-09-28 14:12:32

0

嘗試:

DateTime first; 
DateTime second; 

int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds; 
+0

不需要對TimeSpan進行類型轉換,TotalMilliseconds是雙精度型。 – 2009-09-28 14:09:03

+0

演員不會傷害表演並使意圖更清晰。將返回值轉換爲int也是有道理的,因爲它必須按照OP的要求進行轉換,以便與定時器一起使用。順便說一句,代碼只是一個例子,所以如果有任何錯誤並且值得投票,請詳細說明。 – 2009-09-28 14:56:39

+0

沒有返回值的轉換。最後一行不會編譯。 – 2009-09-28 15:41:28

0

嘗試以下操作:

DateTime dtStart; 
    DateTime dtEnd; 

    if (DateTime.TryParse(tb1.Text, out dtStart) && DateTime.TryParse(tb2.Text, out dtEnd)) 
    { 
     TimeSpan ts = dtStart - dtEnd; 
     double difference = ts.TotalMilliseconds; 
    } 
0

如果你只是想在12:02顯示一個消息框,使用計時器控制用的,比方說,250ms的延遲,它會繼續檢查當前時間是否是12:02。如果是,顯示消息並停止計時器。請注意,這不需要開始時間字段(儘管您可能正在將其用於其他內容 - 我不知道 - 在這種情況下,在此處提供給您的其他代碼將會有所幫助)。

1

如果您只處理Times和沒有日期,您只想處理TimeSpan並處理午夜交叉。

TimeSpan time1 = ...; // assume TimeOfDay 
TimeSpan time2 = ...; // assume TimeOfDay 
TimeSpan diffTime = time2 - time1; 
if (time2 < time1) // crosses over midnight 
    diffTime += TimeSpan.FromTicks(TimeSpan.TicksPerDay); 
int totalMilliSeconds = (int)diffTime.TotalMilliseconds; 
0
var firstTime = DateTime.Now; 
var secondTime = DateTime.Now.AddMilliseconds(600); 
var diff = secondTime.Subtract(firstTime).Milliseconds; 


// var diff = DateTime.Now.AddMilliseconds(600).Subtract(DateTime.Now).Milliseconds; 
+0

請小心這個答案。使用'微秒'而不是'TotalMilliseconds'給出不同的結果,前者僅給出時間跨度的毫秒分量,後者給出以毫秒爲單位的總時間。 – 2017-08-12 04:06:18

4

許多上述方案可能適合不同的人。
我想推薦一個稍微修改過的代碼,比「MusiGenesis」的大多數接受的解決方案。

DateTime firstTime = DateTime.Parse(TextBox1.Text); 
DateTime secondTime = DateTime.Parse(TextBox2.Text); 
double milDiff = secondTime.Subtract(firstTime).TotalMilliseconds; 

考慮
- earlierTime.Subtract(laterTime)你會得到一個負值。
- 使用int milDiff = (int)DateTime.Now.Subtract(StartTime).TotalMilliseconds;如果你需要整數值,而不是雙
- 相同的代碼可以用來獲得兩個日期值之間的差異,你可能會得到.TotalDays.TotalHours insteaf的.TotalMilliseconds

0
public static Int64 GetDifferencesBetweenTwoDate(DateTime newDate, DateTime oldDate, string type) 
    { 
     var span = newDate - oldDate; 
     switch (type) 
     { 
      case "tt": return (int)span.Ticks; 
      case "ms": return (int)span.TotalMilliseconds; 
      case "ss": return (int)span.TotalSeconds; 
      case "mm": return (int)span.TotalMinutes; 
      case "hh": return (int)span.TotalHours; 
      case "dd": return (int)span.TotalDays; 
     } 
     return 0; 
    } 
0

VB.net,桌面應用。如果您需要以毫秒爲單位的流逝時間:

Dim starts As Integer = My.Computer.Clock.TickCount 
Dim ends As Integer = My.Computer.Clock.TickCount 
Dim lapsed As Integer = ends - starts