我有兩個蒙面的文本框控件,並想知道如何去獲取每個時間,然後將差異轉換爲毫秒。就像在tb1中寫的,我寫「12:01」,在tb2中寫「12:02」,然後點擊一個按鈕。一旦按鈕被點擊,它啓動一個計時器,並在12:02顯示一個消息框。除了時間轉換部分外,我知道如何去做所有的事情。將2倍轉換爲毫秒之差?
如何實現?
我有兩個蒙面的文本框控件,並想知道如何去獲取每個時間,然後將差異轉換爲毫秒。就像在tb1中寫的,我寫「12:01」,在tb2中寫「12:02」,然後點擊一個按鈕。一旦按鈕被點擊,它啓動一個計時器,並在12:02顯示一個消息框。除了時間轉換部分外,我知道如何去做所有的事情。將2倍轉換爲毫秒之差?
如何實現?
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
要回答這個冠軍的問題:
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的確切功能是什麼。
您需要使用TotalMilliseconds,而不是毫秒。 – MusiGenesis 2009-09-28 14:11:22
您需要「TotalMilliseconds」而不是「毫秒」 毫秒將僅給出時間差的毫秒「餘數」,而不是整個時間跨度。 2.475秒給出毫秒= 475,總毫秒= 2475 – StarPacker 2009-09-28 14:14:07
是的,已更正。 Darn TimeSpan界面。 – 2009-09-28 14:15:10
你必須文本框的值轉換爲日期時間(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); 錯誤處理由您決定。
從大腦記憶:))) – 2009-09-28 14:04:34
你第一次是對的:你需要使用TotalMilliseconds(除非你喜歡每次都返回0)。 – MusiGenesis 2009-09-28 14:12:32
嘗試:
DateTime first;
DateTime second;
int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds;
不需要對TimeSpan進行類型轉換,TotalMilliseconds是雙精度型。 – 2009-09-28 14:09:03
演員不會傷害表演並使意圖更清晰。將返回值轉換爲int也是有道理的,因爲它必須按照OP的要求進行轉換,以便與定時器一起使用。順便說一句,代碼只是一個例子,所以如果有任何錯誤並且值得投票,請詳細說明。 – 2009-09-28 14:56:39
沒有返回值的轉換。最後一行不會編譯。 – 2009-09-28 15:41:28
嘗試以下操作:
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;
}
如果你只是想在12:02顯示一個消息框,使用計時器控制用的,比方說,250ms的延遲,它會繼續檢查當前時間是否是12:02。如果是,顯示消息並停止計時器。請注意,這不需要開始時間字段(儘管您可能正在將其用於其他內容 - 我不知道 - 在這種情況下,在此處提供給您的其他代碼將會有所幫助)。
如果您只處理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;
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;
請小心這個答案。使用'微秒'而不是'TotalMilliseconds'給出不同的結果,前者僅給出時間跨度的毫秒分量,後者給出以毫秒爲單位的總時間。 – 2017-08-12 04:06:18
許多上述方案可能適合不同的人。
我想推薦一個稍微修改過的代碼,比「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
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;
}
VB.net,桌面應用。如果您需要以毫秒爲單位的流逝時間:
Dim starts As Integer = My.Computer.Clock.TickCount
Dim ends As Integer = My.Computer.Clock.TickCount
Dim lapsed As Integer = ends - starts
您的問題不清楚。你不知道如何獲得兩個DateTime之間的差異或如何將「12:01」轉換爲DateTime? – 2009-09-28 14:01:12