日期和时间正则表达式

时间:2011-09-20 02:33:19

标签: c# regex datetime

我正在寻找一个与以下日期时间格式匹配的正则表达式:

dd-MMM-yyyy HH:mm:ss (15-Sep-2011 16:00:47)

目前我只有日期的正则表达式,如下所示:

^(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}$

关于时间的任何想法部分?

我找到解决方案的人很好。提交任何想要使用它的人。

(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}\s(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d

3 个答案:

答案 0 :(得分:2)

一定是正则表达式吗?

DateTime.TryParseExact会更好。

DateTime myDate;
// dd-MMM-yyyy HH:mm:ss (15-Sep-2011 16:00:47)
if (DateTime.TryParseExact(dateAsString, 
                          "dd-MMM-yyyy HH:mm:ss", 
                          new CultureInfo("en-US"),
                          DateTimeStyles.None,
                          out myDate))
{  ... }

答案 1 :(得分:0)

呃,在我看来, date 位是很难的:-)但是你可以使用相同的方法。

假设你有两个固定数字,你可以使用类似的东西:

(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]

第一位是稍微棘手的一点,因为你想要一个:

  • 01后跟数字。
  • 2后跟03

分钟和秒都是:

  • 05后跟09

如果您想允许一位数小时,只需将[01]替换为[01]?

您可能还想考虑人们可能会在月份中输入novOcT,从而降低您的正则表达式的效用。

这可以通过不区分大小写的版本来解决,这也会减少正则表达式的大小,每月只需要一个字符串。

答案 2 :(得分:0)

正如Joel上面所说,我应该在此处添加我的解决方案。 所以这就是:

(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}\s(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d

请告诉我它是否有效。