我有两个蒙面的文本框控件,并想知道如何去获取每个时间,然后将差异转换为毫秒。就像在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