如何在GWT中检查时间戳的正则表达式?

时间:2013-02-02 13:56:11

标签: java regex gwt

以下时间戳格式

的正则表达式是什么
YYYY-MM-DD HH:mm:ss.S

YYYY-MM-DD HH:mm:ss.S AM/PM

YYYY-MM-DD HH:mm:ss.S AM/PM Z

YYYY-MM-DD HH:mm:ss.S Z

其中

Y: year, 
M: Month,
D: Date,
H: hour,
m: minute,
s: second,
S: Milisecond 3 digit only,
Z: Time zone.

我正在以字符串格式获取时间戳格式,因此要验证它。

如何检查GWT中的正则表达式?

3 个答案:

答案 0 :(得分:6)

只是简单描述这样的模式:

^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}(?: [AP]M)?(?: [+-]\d{4})?$

因为使用正则表达式进行实际日期验证的任何试验本身都是错误的。

我将大写字母Z作为RFC822时区,正则表达式需要更改以符合TZD或一般文本时区。

答案 1 :(得分:1)

除了Datejs继续js检查日期字符串之外,Gwt附带DateTimeFormat来解析日期字符串和格式日期,并支持locales。在解析后的字符串与预期格式不匹配的情况下,它会引发IllegalArgumentException

String dateStr = "2011-04-21 20:37:36.999 -0800";
String fmt = "yyyy-MM-dd HH:mm:ss.S Z"; // your 4th case: YYYY-MM-DD HH:mm:ss.S Z
DateTimeFormat format = DateTimeFormat.getFormat(fmt);
try {
  Date date = format.parse(dateStr);
  System.out.println("Validated: " + date);
} catch (IllegalArgumentException e) {
  System.out.println("Validation error: " + e.getMessage());
}

dateStr = "2011-04-21 08:37:36.999 PM -0800"; // your 3rd case YYYY-MM-DD HH:mm:ss.S AM/PM Z
fmt = "yyyy-MM-dd hh:mm:ss.S a Z";
format = DateTimeFormat.getFormat(fmt);
try {
  Date date = format.parse(dateStr);
  System.out.println("Validated: " + date);
} catch (IllegalArgumentException e) {
  System.out.println("Validation error: " + e.getMessage());
}

您不会说格式字符串是固定的还是在执行验证之前可以在运行时提供。因此,在第二种情况下,您需要使用replace将'Y'更改为'y',将'AM / PM'更改为'a',这是DateTimeFormat中使用的符号

答案 2 :(得分:0)

我会说使用Datejs

否则您将需要进行大量编码,并且正则表达式不是最好的验证时间戳以及它是否有效。 Datejs将检查日期的有效性,从那里你将收到一个Date对象或null(如果它无效!)。

  

Date.parse(“2013-02-02 12:01:01.000”,“yyyy-MM-dd HH:mm:ss.u”);

有关详细信息,请参阅:

  

Datejs API documentation

     

Datejs Format spec