我正在制作一个考勤卡计划,用户输入开始时间,结束时间和项目名称。他们可以点击“添加”,然后将输入的详细信息添加到列表框中。
我不允许添加数据,除非开始时间和结束时间的格式如下:08:14am
但是,这很烦人,不得不每次都输入它,所以我决定,通过正则表达式,让它自动格式化。因此,如果您输入8:14
,则会将其更改为08:14am
。如何通过Regex.Replace()
完成此操作?
如果您有任何其他方法,请不要犹豫,列出它们。
修改1: 我还有其他替代品;例如814
转到08:14am
,8
转到08:00am
编辑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 :(得分:5)
你看过DateTime.Parse
了吗?它接受"08:14am"
,"8:14"
[1]和其他变体,并在今天的日期上午8:14返回DateTime
设置。
[1]至少在英国文化中 - 考虑提供CultureInfo
参数,具体取决于您是要关注用户的本地格式首选项,还是采用固定格式。
编辑我还有其他替代品;例如814到08:14 am,8到08:00 am
看一下DateTime.ParseExact
:你可以提供一系列有效的时间格式(例如“hh:mm”,“hmm”,“h”等)
答案 1 :(得分:1)
答案 2 :(得分:1)
你考虑过使用DateTimePicker吗?让用户写下时间看起来更麻烦。
参见例如http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.aspx
答案 3 :(得分:0)
我认为正则表达式对此有点矫枉过正。为什么不简单地在最后添加“am”,以防nto已添加的是2行代码,以防您在方法中使用字符串。
答案 4 :(得分:0)
如果可能的话,我会建议不要使用正则表达式(正如其他人所说的那样,似乎有点过分)并尝试使用日期时间格式。见这里:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
“HH”格式标记将小时格式设置为从00到23的24小时时间。传统上,12小时不是零填充到左边,而是24小时时间(至少和我一样频繁)看到他们),可能是为了避免1800和0800之间的混淆。或者,如果你不想要24小时,你可能只需要将字符串的小时部分用零填充到最多2位。
编辑:
根据您的新要求,我想写一个简单的解析器让用户输入“814”,意思是“08:14 AM”并使用时间格式化功能进行显示。