0

私のコントローラーは、この文字列「20120115Z」を日付を表す@RequestParamとして受け取ります。

yyyy-MM-ddの形式に変換したいので、この2012-01-15のような新しい文字列を作成します。

ご覧のとおり、区切り文字はなく、常に最後の文字として「Z」のみが使用されます。

私のアプローチは非常に明白でした:

String data = 
strData.substring(0, 4) + "-" + 
strData.substring(4, 6) + "-" + 
strData.substring(6, 8);

そしてそれは機能しますが、ご存知のように、これらの「魔法数」は避けるべきものです。また、「^ [^ \ s] {4} [^ \ s] {2} [^ \ s] {2} Z $」のような正規表現を使用しようとしましたが、成功しませんでした。

何か案が?

更新:@Brian Agnewが提案したように、最後にJoda-TimeDateTimeクラスでそれを実行しました

DateTimeFormatter fmt = DateTimeFormat.forPattern("YYYYMMdd'T'hhmm'Z'");
String strData = "20120115T0600Z";
DateTime dt = fmt.parseDateTime(strData);

印刷方法:

private static void printDateTime(DateTime dt) {
    int year = dt.getYear();
    int month = dt.getMonthOfYear();
    int day = dt.getDayOfMonth();
    int hour = dt.getHourOfDay();
    int minute = dt.getMinuteOfHour();
    int second = dt.getSecondOfMinute();
    int millis = dt.getMillisOfSecond();
    String zone = dt.getZone().toString();
    log.info("fecha: "
            + day + "/" + month + "/" + year + " " + hour + ":" + minute + ":" + second + ":" + millis
            + " " + zone + "\n");
}

出力

15/1/2012 6:0:0:0 UTC

みんな、ありがとう

4

1 に答える 1

4

私はおそらくJoda-TimeDateTimeFormatを使用します

なんで ?時間/分/秒の有効な値を含む形式をチェックし、(同様のアプローチを使用して再形式化することを含めて)何ができるかを示す適切なDateTimeオブジェクトを返します。

解析したい形式を指定するだけで、残りはすべて実行されます。あなたは日付を持っているので、そのように扱ってください。

于 2012-11-16T10:09:12.607 に答える