47

我有两个蒙面的 TextBox 控件,想知道如何获取每个控件的时间,然后将差异转换为毫秒。比如,在 tb1 中我写“12:01”,在 tb2 中我写“12:02”,然后单击一个按钮。单击按钮后,它将启动一个计时器,并在 12:02 显示一个消息框。除了时间转换部分,我知道如何做所有这些。

如何实现?

4

11 回答 11

121
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
于 2009-09-28T14:10:38.830 回答
15

要回答标题问题:

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 的确切功能是什么。

于 2009-09-28T13:54:56.507 回答
7

您必须将文本框的值转换为 DateTime (t1,t2),然后:

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

或使用 DateTime.TryParse(textbox1, out t1); 错误处理取决于您。

于 2009-09-28T13:55:24.617 回答
5

上述许多解决方案可能适合不同的人。
我想建议一个比“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.TotalHoursinsteaf.TotalMilliseconds

于 2014-05-09T21:57:16.587 回答
2
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;
于 2013-01-03T21:40:57.297 回答
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;
于 2009-09-28T14:21:07.347 回答
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;
    }
于 2014-09-05T09:37:23.497 回答
0

尝试:

DateTime first;
DateTime second;

int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds;
于 2009-09-28T13:56:31.870 回答
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;
   }
于 2009-09-28T13:57:37.263 回答
0

如果您只想在 12:02 显示消息框,请使用延迟时间为 250 毫秒的计时器控件,它会不断检查当前时间是否为 12:02。如果是,则显示消息并停止计时器。请注意,这不需要开始时间字段(尽管您可能会将其用于其他用途——我不知道——在这种情况下,此处提供给您的其他代码会有所帮助)。

于 2009-09-28T14:09:11.860 回答
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
于 2017-09-15T02:50:49.727 回答