有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在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) 个答案

  1. # 1 楼答案

    我会说使用Datejs

    否则,您将需要进行大量编码,而regex并不是验证时间戳和时间戳是否有效的最佳工具。 Datejs将检查日期有效性,从中您将收到一个日期对象或null(如果它无效!)

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

    有关更多信息,请参阅:

    Datejs API documentation

    Datejs Format spec

  2. # 2 楼答案

    简单地说,只描述如下模式:

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

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

    我的大写字母Z是RFC822时区,正则表达式需要更改以符合TZDs或通用文本时区

  3. # 3 楼答案

    除了通过js检查日期字符串的Datejs之外,Gwt还提供了DateTimeFormat来解析日期字符串和格式化日期,并支持区域设置。如果解析的字符串与预期格式不匹配,则会引发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中使用的符号