Java中将无横杠日期字符串转为带横杠格式的标准方法
在Java中转换日期字符串的标准方法
当然有标准实现啦!针对你这种把"20180101"转成"2018-01-01"的需求,Java提供了几种靠谱的方案,这里推荐两种最常用的:
1. 优先使用Java 8+的java.time日期时间API(推荐)
这是官方现在主推的日期处理方案,不仅能完成格式转换,还能自动校验日期的合法性(比如遇到"20180230"这种无效日期会直接抛出异常,避免后续bug)。代码示例如下:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class DateConversionDemo { public static void main(String[] args) { String originalStr = "20180101"; // 定义输入的日期格式:yyyyMMdd(年4位+月2位+日2位) DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyyMMdd"); // 将字符串解析为LocalDate对象 LocalDate date = LocalDate.parse(originalStr, inputFormatter); // 定义输出的日期格式:yyyy-MM-dd DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 格式化为目标字符串 String formattedStr = date.format(outputFormatter); System.out.println(formattedStr); // 输出:2018-01-01 } }
2. 纯字符串拼接(仅适用于格式绝对确定的场景)
如果你能100%保证输入字符串的格式是yyyyMMdd且长度正确,也可以直接用String的substring方法做拼接,但这种方法不会校验日期的有效性,比如输入"20181301"(月份13)也会硬拼成"2018-13-01",所以只适合简单场景:
String originalStr = "20180101"; String formattedStr = originalStr.substring(0, 4) + "-" + originalStr.substring(4, 6) + "-" + originalStr.substring(6); System.out.println(formattedStr); // 输出:2018-01-01
总结
如果是处理日期相关的转换,强烈推荐第一种java.time的方案,它既符合Java的标准规范,又能保证数据的合法性,是工业界的最佳实践。
内容的提问来源于stack exchange,提问作者Touqeer
相关产品推荐
相关产品推荐

