2013-02-02 30 views
2

什麼將是下面的時間戳格式如何檢查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中檢查上面的正則表達式?

回答

6

只是一些簡單的描述只有這樣的模式:

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

任何試探性的用正則表達式實際日期驗證的聲音本身是錯誤的。

我把大寫字母Z作爲RFC822時區,正則表達式需要根據TZD或一般文本時區進行更改。

+0

^\\ d {4} - \\ d {2} - \\ d {2} \\ d {2}:\\ d {2}:\\ d {2} \\。\\ d {3}(?: [AP] M)?( ?:[+ - ] \\ d {4})?$ right? – StackOverFlow

+1

是的(http://fiddle.re/mpnb) –

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

1

除了Datejs其中繼上JS來檢查日期字符串,GWT自帶DateTimeFormat解析日期字符串和格式日期與支持f或語言環境。在解析的字符串與預期格式不匹配的情況下,它會引發一個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'和'AM/PM'更改爲'a',這些符號用於DateTimeFormat