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})?$

正規表現を使用した実際の日付の検証の暫定的なものは、本質的に間違っているように聞こえます。

RFC822 タイムゾーンとして大文字の Z を取得しました。正規表現は、TZD または一般的なテキストのタイムゾーンに準拠するように変更する必要があります。

于 2013-02-02T14:07:04.953 に答える
1

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したがって、2番目のケースでは、 「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");

詳細については、以下を参照してください。

DatejsAPIドキュメント

Datejsフォーマット仕様

于 2013-02-02T14:16:52.610 に答える