Как конвертировать 1400-1500 в 14:00 - 15:00? - PullRequest
3 голосов
/ 23 марта 2009

Я получаю данные, представляющие временной интервал от сервиса в виде строки в виде:

1500-1600

Это означает, что с 15:00 до 16:00.

У меня будет список таких, например:

1200-1300

1300-1400

1400-1500

и я должен представить это в пользовательском интерфейсе как

12: 00–10: 00

13:00 - 14:00

14:00 - 15:00

К сожалению, этот список может быть в случайном порядке.

У меня вопрос: есть ли способ использовать объект DateTime, чтобы иметь возможность преобразовать 24-часовое время в 12-часовое, а также есть ли способ упорядочить время по порядку?

В данный момент я чувствую, что мне придется написать собственную функцию синтаксического анализа, но мне интересно, кто-нибудь знает, как это сделать лучше? или могли бы посоветовать, как им этого добиться.

Ответы [ 5 ]

11 голосов
/ 23 марта 2009

Я предполагаю, что вы знаете, как разделить время на «1400» и «1500». Самый простой способ (IMO) - использовать

DateTime.ParseExact(input, "HHmm", CultureInfo.InvariantCulture)

Это вернет DateTime с сегодняшней датой и заданным временем. Затем вы можете отформатировать это DateTime так, как вы хотите.

В качестве альтернативы, вы можете проанализировать "1400" как целое число, а затем найти минуты и часы, используя Math.DivRem, делив на 100. Хотя лично я предпочитаю использовать DateTime.

4 голосов
/ 23 марта 2009

Если у вас есть строки из четырех цифр (1200, 1300), и они всегда будут четырьмя цифрами (например, 9:00 - 09:00), тогда вы можете вызвать статический ParseExact метод для DateTime структура вроде так:

DateTime dt = DateTime.ParseExact(time, "HHmm", formatInfo);

formatInfo - это IFormatProvider интерфейс реализация.

Если у вас есть трехзначная строка, вы можете использовать это:

DateTime dt = DateTime.ParseExact(time, "Hmm", formatInfo);

Однако я бы порекомендовал использовать четырехзначную строку из-за неоднозначности, представленной со временем, подобным «121».

Оттуда, если вы хотите вывести am / pm, и т. Д., И т. Д., Вы просто вызовете ToString метод , передав следующий формат:

string ampm = dt.ToString("htt");
1 голос
/ 23 марта 2009

Сначала я разделил бы на "-", чтобы получить две разные строки, а затем использовал метод DateTime.ParseExact() для преобразования в пригодный для использования объект даты и времени

0 голосов
/ 23 марта 2009

Попробуйте преобразовать и вывести в любой формат, который вам нужен

Dim aDateTime As DateTime
aDateTime = DateTime.ParseExact(input, "HHmm", Nothing)
Dim outputToDesiredFormat As String = dt.ToString("h:mm tt")
0 голосов
/ 23 марта 2009

Пользовательский анализ должен быть тривиальным. Разделить на «-» и анализировать каждый раз; удалите две последние цифры, чтобы получить минуты, оставшиеся одну или две, чтобы получить час, и все готово.

Если они вам нужны по порядку, сортируйте их.

Обновите вопрос или оставьте комментарий, если вам нужна дополнительная помощь.

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