Как представить значение времени только в .NET?

Есть ли способ представить значение времени только в .NET без даты? Например, указывая время открытия магазина?

TimeSpan указывает диапазон, тогда как я хочу только сохранить значение времени. Использование DateTime для указания этого приведет к появлению нового DateTime(1,1,1,8,30,0) что не очень желательно.

Как говорили другие, вы можете использовать DateTime и игнорировать дату или использовать TimeSpan . Лично я не увлекаюсь ни одним из этих решений, так как ни один из типов не отражает концепцию, которую вы пытаетесь представить, – я рассматриваю типы даты / времени в .NET как-то на разреженной стороне, что является одной из причин, по которым я начал Время Ноды . В Noda Time вы можете использовать тип LocalTime для представления времени суток.

Одна вещь, которую следует учитывать: время суток – это не обязательно время, прошедшее с полуночи в тот же день …

(В другом случае, если вы также хотите представить время закрытия магазина, вы можете обнаружить, что хотите представить 24:00, то есть время в конце дня. Большинство API-интерфейсов даты и времени, включая Noda Время – не допускать, чтобы это отображалось как значение времени дня.)

Вы можете использовать временные интервалы

 TimeSpan timeSpan = new TimeSpan(2, 14, 18); Console.WriteLine(timeSpan.ToString()); // Displays "02:14:18". 

[Редактировать]
Принимая во внимание другие ответы и редактирование вопроса, я все равно буду использовать TimeSpan. Нет смысла создавать новую структуру, в которой достаточно существующего из frameworks.
В этих строках вы в конечном итоге дублируете многие собственные типы данных.

Если эта пустая Date действительно вас пугает, вы также можете создать более простую структуру Time :

 // more work is required to make this even close to production ready class Time { // TODO: don't forget to add validation public int Hours { get; set; } public int Minutes { get; set; } public int Seconds { get; set; } public override string ToString() { return String.Format( "{0:00}:{1:00}:{2:00}", this.Hours, this.Minutes, this.Seconds); } } 

Или, зачем беспокоиться: если вам не нужно делать какие-либо вычисления с помощью этой информации, просто сохраните ее как String .

Я говорю использовать DateTime. Если вам не нужна дата, просто проигнорируйте ее. Если вам нужно отобразить только время для пользователя, выведите его в формате для пользователя следующим образом:

 DateTime.Now.ToString("t"); // outputs 10:00 PM 

Похоже, что вся дополнительная работа по созданию нового classа или даже с использованием TimeSpan не нужна.

Я считаю, что class Рубенса – это хорошая идея, поэтому он решил сделать неизменный образец своего classа Time с базовой проверкой.

 class Time { public int Hours { get; private set; } public int Minutes { get; private set; } public int Seconds { get; private set; } public Time(uint h, uint m, uint s) { if(h > 23 || m > 59 || s > 59) { throw new ArgumentException("Invalid time specified"); } Hours = (int)h; Minutes = (int)m; Seconds = (int)s; } public Time(DateTime dt) { Hours = dt.Hour; Minutes = dt.Minute; Seconds = dt.Second; } public override string ToString() { return String.Format( "{0:00}:{1:00}:{2:00}", this.Hours, this.Minutes, this.Seconds); } } 

В дополнение к Chibueze Opata :

 class Time { public int Hours { get; private set; } public int Minutes { get; private set; } public int Seconds { get; private set; } public Time(uint h, uint m, uint s) { if(h > 23 || m > 59 || s > 59) { throw new ArgumentException("Invalid time specified"); } Hours = (int)h; Minutes = (int)m; Seconds = (int)s; } public Time(DateTime dt) { Hours = dt.Hour; Minutes = dt.Minute; Seconds = dt.Second; } public override string ToString() { return String.Format( "{0:00}:{1:00}:{2:00}", this.Hours, this.Minutes, this.Seconds); } public void AddHours(uint h) { this.Hours += (int)h; } public void AddMinutes(uint m) { this.Minutes += (int)m; while(this.Minutes > 59) this.Minutes -= 60; this.AddHours(1); } public void AddSeconds(uint s) { this.Seconds += (int)s; while(this.Seconds > 59) this.Seconds -= 60; this.AddMinutes(1); } } 

Если вы не хотите использовать DateTime или TimeSpan и хотите сохранить время суток, вы можете просто сохранить секунды с полуночи в Int32 или (если вы даже не хотите секунд) минут с полуночи будет вписываться в Int16. Было бы тривиально написать несколько методов, необходимых для доступа к часам, минутам и секундам от такого значения.

Единственная причина, по которой я могу думать, чтобы избежать DateTime / TimeSpan, будет, если размер структуры критический.

(Конечно, если вы используете простую схему, подобную вышеперечисленной, завернутую в class, тогда также было бы тривиально заменить хранилище TimeSpan в будущем, если вы вдруг поймете, что это даст вам преимущество)

  • Что это за формат даты? 2011-08-12T20: 17: 46.384Z
  • Получить время определенного часового пояса
  • Java: getMinutes и getHours
  • Должен ли MySQL установить часовой пояс в UTC?
  • Interesting Posts

    Как я могу создать приложение Android в Android Studio, которое использует Google Maps Api v2?

    Как я могу сравнить версии двух исполняемых файлов из командной строки?

    Как установить ant на OS X Mavericks?

    Какая разница между classами WebClient и HTTPWebRequest в .NET?

    Угловая – разница между нетронутыми / грязными и коснутыми / нетронутыми

    Как интерфейсы заменяют необходимость множественного наследования при наличии существующих classов

    AngularJS. Когда выбрано атрибут ng-model, ng-selected не работает

    Что именно происходит, когда я устанавливаю LoadUserProfile пула IIS?

    Увеличение значения тайм-аута в службе WCF

    Есть ли способ использовать бивариантные цветовые карты в matplotlib?

    привязки, не разрешающие обработку АСТ в eclipse

    Как отправить Ctrl + Alt + End на удаленный рабочий стол?

    Как правильно остановить BackgroundWorker

    Как вызвать метод Objective C из Javascript и отправить данные в Javascript в iOS?

    Разница между _JAVA_OPTIONS JAVA_TOOL_OPTIONS и JAVA_OPTS

    Давайте будем гением компьютера.