C # - Разбор строки в DateTime только с часами: минутами: секундами - PullRequest
6 голосов
/ 23 ноября 2010

Я получаю часы, минуты и секунды как целочисленный пользовательский ввод.

Теперь, когда я пытаюсь использовать DateTime.Parse и DateTime.TryParse AND Convert.ToDateTime, все они возвращают правильные значения.часы / минуты / секунды;однако он также возвращает дату (год, месяц, день и т. д.)

        string a = this.hours.ToString() + ":" + this.minutes.ToString() + ":" + this.seconds.ToString();

        this.alarm = new DateTime();
        this.alarm = DateTime.ParseExact(a, "H:m:s", null);

Допустим, часы - 05, минуты - 21, а секунды - 50. «a» будет 05:21: 50.Я ожидаю, что "тревога" будет 05:21:50.Тем не менее, это действительно (может быть):

11/23/10 05:21:50

Есть ли способ заставить его работать правильно?Заранее спасибо.

Ответы [ 5 ]

11 голосов
/ 23 ноября 2010

Экземпляр DateTime всегда будет включать некоторую информацию о дате.

Если вы пытаетесь представить только время суток, вы должны использовать TimeSpan (с TimeSpan, представляющим диапазон сполночь ... или время суток. Вы также заметите, что свойство DateTime.TimeOfDay делает то же самое).

Код будет аналогичным:

var timeOfDay = TimeSpan.ParseExact(a, "H:m:s", null);
5 голосов
/ 23 ноября 2010

DateTime всегда содержит время и date. Если вам нужен класс, который только экономит время, вы можете создать свой собственный struct, чтобы справиться с этим. Но в общем случае в этом нет необходимости, поскольку вы можете просто игнорировать часть даты в структуре DateTime, например ::100100

string a = "05:21:50";

DateTime alarm = new DateTime();
alarm = DateTime.ParseExact(a, "H:m:s", null);
Console.WriteLine(alarm.ToString("H:m:s"));
Console.WriteLine(alarm.Hour);
Console.WriteLine(alarm.Minute);
Console.WriteLine(alarm.Second);
2 голосов
/ 23 ноября 2010

Вы не можете этого сделать, потому что DateTime по своей природе представляет дату и время.

В .NET Framework нет типа, предназначенного для представления времени суток, но самым близким будет TimeSpan. Попробуйте обернуть его в свой собственный тип TimeOfDay, если для вас важна семантика времени дня.

2 голосов
/ 23 ноября 2010
0 голосов
/ 23 ноября 2010

Как уже упоминалось здесь, объект DateTime всегда будет содержать часть Date, но проще всего просто проигнорировать ее.Затем при распечатке вы можете использовать следующий синтаксис:

alarm.ToShortTimeString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...