java - 分割字符串不带分隔符

标签 java string split delimiter

我的 Controller 接收这个字符串“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-Time DateTime 类完成了

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

谢谢大家

最佳答案

我也许会使用 Joda-Time DateTimeFormat

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

您只需给它您想要解析的格式,它就会完成剩下的所有工作。你有一个约会,所以就这样对待它。

关于java - 分割字符串不带分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414341/

相关文章:

java - 如何将 Java 颜色转换从 RGB 反转为 CIEXYZ/CIELAB

python - 字符串是如何比较的?

Pandas :将对象转换为 str

bash - 如何使用 awk 按天将带时间戳的日志文件拆分为多个文件

c++ - 知道其公共(public) ID 的拆分数据

mysql - 从 varchar MySQL,存储过程中挑选出一个字符串

java - Hibernate二级缓存理解

java - arraylist 部分到 3 个字符串部分

java - 有人可以帮我处理 Android InputFilter "filter"方法的参数吗? (加上正则表达式)

python - 试图从文本文件中提取有用的信息 block