我的控制器收到这个字符串“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 $”等正则表达式,但没有成功。
有什么想法?
更新:最后,我已经与乔达时间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
谢谢大家
如果选择是在魔术数字和正则表达式的诅咒中使用的相同数字之间,那么... –
为什么你想要避免这些数字?我的意思是,如果你也使用正则表达式,你需要使用长度。所以,没有出路。并且。它更好地去与子字符串。 –
你的方法很好。保持简单,只需使用子字符串。如果你真的关心幻数,然后将它们拉出到常量,例如YEAR_LENGTH等。但如果是我,我只是把它放在一个有名的方法和评论,所以很明显。 – EdC