3

以下时间戳格式的正则表达式是什么

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 中检查上述正则表达式?

4

3 回答 3

6

只是一些简单的事情,只描述这样的模式:

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

因为任何使用正则表达式进行真实日期验证的尝试听起来都是错误的。

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

于 2013-02-02T14:07:04.953 回答
1

除了Datejs在 js 上中继来检查日期字符串之外,Gwt 还带有DateTimeFormat来解析日期字符串和格式日期,并支持语言环境。IllegalArgumentException如果解析的字符串与预期的格式不匹配,它会引发 a 。

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

于 2013-02-03T08:31:54.693 回答
0

我会说使用Datejs

否则,您将需要进行大量编码,而正则表达式并不是验证时间戳及其是否有效的最佳选择。Datejs 将检查日期的有效性,然后您将收到一个 Date 对象或 null(如果它无效!)。

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

有关更多信息,请参阅:

Datejs API 文档

Datejs格式规范

于 2013-02-02T14:16:52.610 回答