计算从当前时间到特定时间的毫秒数

时间:2018-09-03 14:14:48

标签: c# visual-studio timer

所以我有一个字符串currentTask.time,它存储着一个看起来像'13:00'的值。

是否有一种方法可以根据当前系统时间(直到再次成为该时间)计算的毫秒数?

所以基本上,假设时间是12:59,如果我调用此函数传递“ 13:00”,则应该返回60000 ...

不太确定解决此问题的最佳方法...

谢谢!

2 个答案:

答案 0 :(得分:2)

此代码假定您正在使用UTC日期时间。

如果您使用的是当地时间,那么您很可能会遇到诸如夏令时切换的问题。

// The time of day in hh:mm
var rawTime = "13:00";

// Parse the time
var time = TimeSpan.Parse(rawTime);

// Todays date, with the parsed time
var then = DateTime.UtcNow.Date + time;

// Todays date with the current time
var now = DateTime.UtcNow;

// If the parsed time has already passed then move forward a day
if(then < now)
    then = then + TimeSpan.FromDays(1);

// How long until the parsed time
var duration = then - now;          
var durationInMilliseconds = duration.TotalMilliseconds;

Console.WriteLine(duration); // 22:35:41.4646691
Console.WriteLine(durationInMilliseconds + "ms"); // 81341464.6691ms

https://dotnetfiddle.net/sre6V5

答案 1 :(得分:1)

首先,将其转换为日期时间:

//note: you can also use ParseExact if you need a specific format.
var dt = DateTime.Parse(currentTask.time);

然后,从当前时间中减去它,结果是TimeSpan

//note, normal time difference is the other way roud: DateTime.Now - dt
var ts = dt - DateTime.Now;

您的结果在TotalMilliseconds属性中。参见:https://docs.microsoft.com/en-us/dotnet/api/system.timespan.totalmilliseconds?view=netframework-4.7.2

请注意,这大约需要3到6毫秒。如果您需要更多说明,请使用StopWatch


更新

在您的特定情况下,没有日期。在这种情况下,您可以创建2个TimeSpans

var yourTotalMilliSeconds = 
                   (new DateTime(hours, minutes, seconds)TimeOfDay - DateTime.Now.TimeOfDay)
        .TotalMillisenconds;