所以我有一个字符串currentTask.time
,它存储着一个看起来像'13:00'的值。
是否有一种方法可以根据当前系统时间(直到再次成为该时间)计算的毫秒数?
所以基本上,假设时间是12:59,如果我调用此函数传递“ 13:00”,则应该返回60000 ...
不太确定解决此问题的最佳方法...
谢谢!
答案 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
答案 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;