2014-02-17 3 views
1

Я пытаюсь вычислить создание оставшегося времени калькулятора в VB.NET, и это не позволит мне, и я не могу понять, почему. Вот мой кодTimeSpan не вычисляет

Dim PrefendinedDateTime As DateTime = "3:00:00" 
    Dim TimeNow As DateTime = DateTime.Now 
    Dim ElapsedTime As TimeSpan = (TimeNow - frmStartDateTime) 

    Dim TimeRemaining As TimeSpan = PrefendinedDateTime - New DateTime(ElapsedTime.Ticks) 

    txtTimeRemaining.Text = New DateTime(TimeRemaining.Ticks).ToString("HH:mm:ss") 

Я получаю сообщение об ошибке:

тиков должен быть между DateTime.MinValue.Ticks и DateTime.MaxValue.Ticks. Имя параметра: клещи

Не совсем уверен, что это означает

ответ

1

Вы не можете отдать свой отрезок времени на сегодняшний день, потому что это разные тиков. Что вам нужно это:

txtTimeRemaining.Text = TimeRemaining.ToString("g") 

или это:

txtTimeRemaining.Text = TimeRemaining.ToString("hh\:mm\:ss") 

Обратите внимание, как строка формата отличается для TimeSpan, по сравнению с форматированием времени даты, например, и что : теперь требует побега. Это подробно объясняется в ссылке # 2.

Ссылки:

Давайте остановимся на секунду, в то время как я пытаюсь объяснить, почему он не работает для вас. Забудьте о тиках, подумайте за считанные секунды, потому что это измеримый интервал, который легко понять. Предположим, что временной интервал - это секунда. Теперь вы пытаетесь создать дату, пропуская в ней одну секунду. Что вы ожидаете получить? 1 секунда AD, то есть 1-й год, 1-й месяц и т. Д.? Справедливо.

Предположим, что у вас есть интервал минус 1 секунда (да, интервалы могут быть отрицательными). Вы думаете, что это 1 секунда до нашей эры, верно? К сожалению, отрицательные даты в .NET не разрешены.

Как правило, интервалы времени (представлены в .NET по TimeSpan), а точки во времени (представленные DateTime) должны рассматриваться отдельно, поскольку они являются логически различными объектами. Существует одностороннее отношение, хотя, например, две даты могут представлять собой TimeSpan. Однако TimeSpan не представляет двух дат. Фактически, независимо от того, сколько у вас TimeSpans, вы никогда не сможете связать их с какой-то момент времени.

+0

Это не работает, оно возвращает: Строка ввода не была в правильном формате. @Neolisk – user2177940

+0

Я могу понять, что, однако, я не знаю, как вы могли бы это исправить. – user2177940

+0

@ user2177940: Попробуйте 'TimeRemaining.ToString (« g »)' на данный момент. Я посмотрю, поддерживает ли это форматирование. – Neolisk