私のコントローラーは、この文字列「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
みんな、ありがとう