C#Regex,格式化时间

时间:2010-11-03 14:15:10

标签: c# regex time format

我正在制作一个考勤卡计划,用户输入开始时间,结束时间和项目名称。他们可以点击“添加”,然后将输入的详细信息添加到列表框中。

我不允许添加数据,除非开始时间和结束时间的格式如下:08:14am但是,这很烦人,不得不每次都输入它,所以我决定,通过正则表达式,让它自动格式化。因此,如果您输入8:14,则会将其更改为08:14am。如何通过Regex.Replace()完成此操作?

如果您有任何其他方法,请不要犹豫,列出它们。

修改1: 我还有其他替代品;例如814转到08:14am8转到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等其他内容。

5 个答案:

答案 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)

从完全不同的方向来看,如何在输入上使用遮罩

例如,有许多JavaScript and jQuery tools可用于执行此操作。

使用此方法保留一些用户对输入的控制权,并让用户看到他们的输入。

答案 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”并使用时间格式化功能进行显示。