Java 11提取ISO格式时间字符串日期部分的最优方案
Java 11提取ISO格式字符串的日期部分(yyyy-MM-dd)
以下是几种可行的最优实现方法,按推荐优先级排序:
方法一:基于Java时间API解析(推荐,健壮性高)
利用java.time包的类处理日期,避免字符串操作的潜在风险:
String s = "2023-12-15T10:13:44.544Z"; // 解析为UTC时间的Instant,转换为LocalDate LocalDate date = Instant.parse(s).atZone(ZoneOffset.UTC).toLocalDate(); // LocalDate的toString()默认输出yyyy-MM-dd格式 String dateStr = date.toString();
原理:原字符串是标准UTC ISO格式,Instant可直接解析;通过atZone(ZoneOffset.UTC)转为UTC时区的日期时间对象,再提取日期部分。
方法二:使用DateTimeFormatter直接解析为LocalDate
同样基于时间API,适合需要自定义格式的场景:
String s = "2023-12-15T10:13:44.544Z"; DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; // 指定UTC时区解析,直接得到LocalDate LocalDate date = LocalDate.parse(s, formatter.withZone(ZoneOffset.UTC)); String dateStr = date.toString();
如果需要显式指定格式,也可以替换为自定义Formatter:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
方法三:字符串截取(仅当格式绝对固定时使用)
如果能确保输入字符串始终是yyyy-MM-ddTHH:mm:ss.SSSZ格式,可直接截取前10位:
String s = "2023-12-15T10:13:44.544Z"; String dateStr = s.substring(0, 10);
注意:此方法不具备容错性,若输入格式发生变化(如年份位数改变、分隔符不同)会直接出错,仅适合固定格式的场景。
内容的提问来源于stack exchange,提问作者N9909
相关产品推荐
相关产品推荐

