Ответ 1
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
У меня есть два маскированных элемента управления TextBox, и мне было интересно, как я буду получать время в каждом, а затем преобразовать разницу в миллисекунды. Например, скажем, в tb1 пишу "12:01", а в tb2 пишу "12:02", а затем нажимаю кнопку. После нажатия кнопки запускается таймер, и в 12:02 будет отображаться сообщение. Я знаю, как сделать все это, за исключением части преобразования времени.
Как это можно достичь?
DateTime dt1 = DateTime.Parse(maskedTextBox1.Text);
DateTime dt2 = DateTime.Parse(maskedTextBox2.Text);
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
Чтобы ответить на заголовок-вопрос:
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.
Вам нужно преобразовать значения текстового поля в 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); Обработка ошибок зависит от вас.
Многие из вышеупомянутых решений могут содержать разные люди.
Я хотел бы предложить слегка модифицированный код, чем большинство принятых решений "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;, если вам нужно целое значение вместо double
.TotalDays или .TotalHours
insteaf .TotalMilliseconds
Если вы имеете дело только с 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;
Try:
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, используйте таймер с задержкой, скажем, 250 мс, который проверяет, текущее время 12:02. Когда это произойдет, отобразите сообщение и остановите таймер. Обратите внимание, что это не требует поля времени начала (хотя вы можете использовать это для чего-то другого - я не знаю), и в этом случае вам будет полезен другой код, предоставленный вам здесь.)
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;
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;
}
VB.net, настольное приложение. Если вам понадобится время в миллисекундах:
Dim starts As Integer = My.Computer.Clock.TickCount
Dim ends As Integer = My.Computer.Clock.TickCount
Dim lapsed As Integer = ends - starts