Рассчитать количество миллисекунд от текущего времени до определенного времени - PullRequest
0 голосов
/ 03 сентября 2018

Итак, у меня есть строка currentTask.time, в которой хранится значение, похожее на это '13: 00 '.

Есть ли способ рассчитать на основе текущего системного времени количество миллисекунд до тех пор, пока оно не будет снова?

Таким образом, в общем, скажем, время 12:59, если я должен вызвать эту функцию, передавая '13: 00 ', она должна вернуть 60000 ...

Не совсем уверен, что лучший способ подойти к этому ...

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Этот код предполагает, что вы работаете с датами 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

0 голосов
/ 03 сентября 2018

Сначала преобразуйте его в дату:

//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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...