2010-11-03 3 views
0

Я делаю программу timecard, в которой пользователь вводит время начала, время окончания и название проекта. Они могут нажать «Добавить» и добавить введенные данные в список.C# Regex, форматирование времени

Я не позволяю добавлять данные, если время начала и окончания не отформатировано следующим образом: 08:14am Это становится раздражающим, хотя каждый раз нужно вводить его так, чтобы я решил, с помощью регулярных выражений , автоматическое форматирование. Поэтому, если вы введете 8:14, он изменит его на 08:14am. Как я могу выполнить это через Regex.Replace()?

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

Редактировать 1: У меня также есть другие замены; например 814 идет к 08:14am и 8 идет в 08:00am

Edit 2: Так вот я использую этот код:

string[] formats = { "h:mm", "h", "hh", "hmm", "hhmm", "h:mmtt", "htt", "hhtt" }; 
DateTime dt = DateTime.ParseExact(t.Text, formats, new CultureInfo("en-US"), DateTimeStyles.None); 
t.Text = dt.ToString("hh:mmtt").ToLower(); 

И он заменяет некоторые вещи, как h:mm, но не другие подобный h.

+0

Вы хотите, чтобы 14:30 были заменены на 02:30 вечера? – Jez

+0

Это было бы неплохо, но не обязательно. – Entity

ответ

5

Вы посмотрели DateTime.Parse? Он принимает "08:14am", "8:14" [1] и другие варианты и возвращает DateTime, установленный в 8:14 утра на сегодняшнюю дату.

[1] В культуре Великобритании, по крайней мере, рассмотрите возможность предоставления параметра CultureInfo в зависимости от того, хотите ли вы обратить внимание на предпочтения локального формата пользователя или принять фиксированный формат.

EDIT У меня также есть другие замены; например 814 идет в 08:14 утра и 8 идет в 08:00 утра

Взгляните на DateTime.ParseExact: вы можете предоставить множество допустимых форматов времени (например, «чч: мм», «хм», «h» и т. Д.)

+0

См. Обновленный вопрос – Entity

+0

Odd - MSDN имеет немного загадочную заметку об использовании «H» самостоятельно: _ Если вы не используете разделители даты или времени в шаблоне пользовательского формата, используйте культуру инварианта для параметра поставщика и самую широкую форму каждый специализированный спецификатор формата. Например, если вы хотите указать часы в шаблоне, укажите более широкую форму «HH» вместо более узкой формы «H» ._ –

+0

Ahh, ок. Благодаря! Это очищает все! – Entity

0

Я думаю, что regex являются излишними для этого. Почему бы просто не добавить «am» в конце, в случае, если nto уже добавлен, это 2-строчный код, если вы работаете со строками в методе.

+0

Но обратите внимание на 0 в начале готового продукта. У меня также есть другие замены; например '814' переходит в' 08:14 am', а '8' переходит в' 08:00 am' – Entity

+0

@TheAdamGaskins: Ах, это требование меняет проблему. Пожалуйста, уточните вопрос! В этом случае, я бы сказал, вы могли бы создать собственный очень простой парсер. Я не уверен, что регулярные выражения очень помогли бы здесь. – FrustratedWithFormsDesigner

0

Я бы рекомендовал не использовать регулярные выражения, если это было возможно (как говорили другие, кажется, излишним) и попробовать использовать форматы datetime. См. Здесь: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Тег формата «HH» будет отформатировать час в виде 24-часового времени с 00 до 23. Традиционно, 12-часовое время не имеет нулевой отметки слева, но 24-часовое время (при по крайней мере, так часто, как я их вижу), вероятно, чтобы избежать путаницы между 1800 и 0800 годами. В качестве альтернативы, если вы не хотите 24-часового времени, вы, вероятно, могли бы просто пропустить часовую часть строки с нулем до двух цифр.


EDIT:

Основываясь на новых требованиях, я бы сказал, что написать простой парсер, чтобы позволить вход пользователей «814» означает «08:14 AM» и использовать функциональные возможности времени форматирования для дисплея.

1

Прибывая на это с совершенно другого направления, как насчет использования маски на входе?

Например, для этого доступно количество JavaScript and jQuery tools.

Используя этот подход, пользователь может контролировать элемент ввода и позволяет пользователю видеть их ввод.

Смежные вопросы