C# 将两次之间的差值转换为毫秒?

C# 将两次之间的差值转换为毫秒?,c#,time,maskedtextbox,C#,Time,Maskedtextbox,我有两个蒙面文本框控件,我想知道如何在每个控件中获取时间,然后将差值转换为毫秒。比如说,在tb1中我写“12:01”,在tb2中我写“12:02”,然后点击一个按钮。单击按钮后,将启动计时器,并在12:02显示消息框。除了时间转换部分,我知道怎么做 如何实现这一目标?回答标题问题: DateTime d1 = ...; DateTime d2 = ...; TimeSpan diff = d2 - d1; int millisceonds = (int) diff.TotalMilliseco

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


如何实现这一目标?

回答标题问题:

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

int millisceonds = (int) diff.TotalMilliseconds;
您可以使用此设置计时器:

timer1.interval = millisceonds;
timer1.Enabled = true;
处理滴答声时,不要忘记禁用计时器

但是,如果您希望在12:03举行一个活动,只需将DateTime.替换为
d1


但是还不清楚textBox1和textBox2的确切功能是什么。

您必须将textbox的值转换为日期时间(t1,t2),然后:

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

请尝试:

DateTime first;
DateTime second;

int milliSeconds = (int)((TimeSpan)(second - first)).TotalMilliseconds;
请尝试以下操作:

   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。如果是,则显示消息并停止计时器。注意,这不需要开始时间字段(尽管您可能会将其用于其他用途——我不知道——在这种情况下,这里提供给您的其他代码将非常有用)。

如果您只处理时间,而不处理日期,则只需处理时间跨度和跨越午夜

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;
TimeSpan time1=…;//假定时间
时间跨度时间2=…;//假定时间
TimeSpan diffTime=时间2-时间1;
if(time2
上述许多解决方案可能适合不同的人。
我想推荐一个比“MusiGenesis”所接受的解决方案稍微修改的代码


注意事项
-
earlierTime.Subtract(laterTime)
您将得到一个负值。
-使用
intmildiff=(int)DateTime.Now.Subtract(StartTime.total毫秒如果需要整数值而不是双精度

-相同的代码可用于获取两个日期值之间的差异,您可以获得
.TotalDays
.TotalHours
而不是
.totalmicrosides

    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;
    }
Dim starts As Integer = My.Computer.Clock.TickCount
Dim ends As Integer = My.Computer.Clock.TickCount
Dim lapsed As Integer = ends - starts

你的问题不清楚。您不知道如何获得两个日期时间之间的差异,或者如何将“12:01”转换为日期时间?无需键入cast to TimeSpan,并且totalmillizes是一个双精度。该cast不会影响性能,并使意图更清晰。将返回值强制转换为int也是有意义的,因为它无论如何都必须强制转换才能与计时器一起使用,正如OP所希望的那样。顺便说一句,这段代码是作为一个例子,所以如果有什么错误,值得投反对票,请详细说明。没有返回值。最后一行将无法编译。您需要使用TotalMillistics,而不是毫秒。您需要“TotalMillistics”而不是“毫秒”。毫秒将只提供时间差的毫秒“余数”,而不是整个时间跨度。2.475秒给出毫秒=475,总毫秒=2475您第一次是对的:您需要使用总毫秒(除非您喜欢每次返回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;
DateTime firstTime = DateTime.Parse( TextBox1.Text );
DateTime secondTime = DateTime.Parse( TextBox2.Text );
double milDiff = secondTime.Subtract(firstTime).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;
    }
Dim starts As Integer = My.Computer.Clock.TickCount
Dim ends As Integer = My.Computer.Clock.TickCount
Dim lapsed As Integer = ends - starts