split string没有分隔符

时间:2012-11-16 10:07:34

标签: java string split delimiter

我的控制器收到此字符串“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 $”这样的正则表达式,但没有成功。

有什么想法吗?

更新:最后我使用Joda-Time DateTime类完成了@Brian Agnew建议

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

谢谢大家

1 个答案:

答案 0 :(得分:4)

我可能会使用Joda-Time DateTimeFormat

为什么?它将检查格式,包括小时/分钟/秒的有效值,并返回一个合适的DateTime对象,您可以执行该操作(包括使用类似方法重新格式化)。

您只需为其提供要解析的格式,它将完成所有其他操作。你有约会,所以请这样对待。