【发布时间】:2018-05-26 10:37:03
【问题描述】:
我有一个字符串“20180101”,需要在“2018”和“01”和“01”之后附加“-”,所以它看起来像“2018-01-01”。 Java中有什么标准方法可以做到吗?
【问题讨论】:
标签: java date date-formatting
我有一个字符串“20180101”,需要在“2018”和“01”和“01”之后附加“-”,所以它看起来像“2018-01-01”。 Java中有什么标准方法可以做到吗?
【问题讨论】:
标签: java date date-formatting
LocalDate.parse(
"20180101",
DateTimeFormatter.BASIC_ISO_DATE
)
.toString()
2018-01-01
那个字符串看起来像一个日期。我建议你把它解析成LocalDate。
您的输入字符串格式uuuuMMdd 是标准ISO 8601 的“基本”变体。java.time 类已为该格式模式预定义了一个对象DateTimeFormatter.BASIC_ISO_DATE。
默认情况下,该类会以您想要的格式(标准ISO 8601 格式)生成String。
LocalDate localDate = LocalDate.parse("20180101", DateTimeFormatter.BASIC_ISO_DATE);
String output = localDate.toString(); // the default format is the format you want.
2018-01-01
上面的方法在性能上有点贵,所以这里有一个简单的方法StringBuilder:
StringBuilder sb = new StringBuilder("20180101");
sb.insert(6, "-");
sb.insert(4, "-");
System.out.println(sb);
【讨论】:
因为结果是一个字符串,我只能建议使用replaceAll,例如使用正则表达式:
String date = "20180101";
date = date.replaceAll("(....)(..)(..)", "$1-$2-$3");
或者
date = date.replaceAll("(\\d{4})(\\d{2})(\\d{2})", "$1-$2-$3");
【讨论】:
date = String.format("%s-%s-%s", date.substring(0, 4), date.substring(4, 6), date.substring(6, 8));