当前位置: 首页 > wzjs >正文

网站建设企业全国十大跨境电商排名

网站建设企业,全国十大跨境电商排名,网站开发工作好不好,邢台疫情最新情况在Java中使用DateTimeFormatter并启用严格模式(ResolverStyle.STRICT)时,解析日期字符串"2025-06-01"报错的根本原因是:模式字符串中的年份格式yyyy被解释为YearOfEra(纪元年份),而非…

在Java中使用DateTimeFormatter并启用严格模式(ResolverStyle.STRICT)时,解析日期字符串"2025-06-01"报错的根本原因是:模式字符串中的年份格式yyyy被解释为YearOfEra(纪元年份),而非Year(公历年份)。在严格模式下,解析器要求所有字段必须完整且一致,而LocalDate需要Year字段(而非YearOfEra)来构建对象,导致转换失败。

解决方案:使用uuuu代替yyyy

将模式中的年份占位符从yyyy改为uuuu,明确指定使用公历年份(Year字段):

java

复制

下载

private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd").withResolverStyle(ResolverStyle.STRICT); // 严格模式

原因详解

  1. 字段差异

    • yyyy → 解析为 YearOfEra(纪元年份),例如 2025 表示“公元2025年”。

    • uuuu → 解析为 Year(公历年份),直接对应ISO年份体系。

  2. 严格模式的要求

    • ResolverStyle.STRICT下,解析器不会自动补全缺失字段(如纪元信息)。

    • 错误信息中的TemporalAccessor包含:

      plaintext

      复制

      下载

      {DayOfMonth=1, MonthOfYear=6, YearOfEra=2025}, ISO

      缺少Year字段,只有YearOfEra,无法直接构建LocalDate

  3. uuuu的优势

    • 直接生成Year字段,与LocalDate所需字段一致。

    • 避免纪元歧义,尤其处理公元前/后的日期更安全。

验证修复后的代码

java

复制

下载

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;public class StrictDateParsing {private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd").withResolverStyle(ResolverStyle.STRICT); // 使用 uuuupublic static void main(String[] args) {String dateStr = "2025-06-01";LocalDate date = LocalDate.parse(dateStr, DATE_FORMATTER); // 解析成功System.out.println(date); // 输出: 2025-06-01}
}

关键结论

占位符含义严格模式下的行为
yyyy纪元年份解析为YearOfEra,导致构建失败
uuuu公历年份解析为Year,与LocalDate兼容

最佳实践
在严格模式中始终使用uuuu表示年份,确保日期字段与LocalDate的要求完全匹配,避免解析错误。

package com.weiyu.utils;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.format.ResolverStyle;
import java.util.ArrayList;
import java.util.List;public class DateUtils {// 标准模式// private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd")// 启用严格模式,使用 ResolverStyle.STRICT 严格模式,拒绝无效日期(如 2023-02-29),自动处理闰年、月份天数等复杂逻辑// 启用严格模式,ofPattern必设置为"uuuu-MM-dd").withResolverStyle(ResolverStyle.STRICT);/*** 有效检查* @param dateStr 字符串* @return 提示信息*/public static String isValidDate(String dateStr) {// 1. 空值检查if (dateStr == null) return "日期字符串不能为null";// 2. 空白检查if (dateStr.isEmpty()) {return "日期字符串不能为空";}return "";}/*** 转换为 LocalDate 格式的日期* @param dateStr 字符串* @return LocalDate 格式的日期*/public static LocalDate parseDate(String dateStr) {// 检查日期字符串格式String msg = isValidDate(dateStr);if (!msg.isEmpty()) {throw new RuntimeException(msg);}try {// 解析日期return LocalDate.parse(dateStr, DATE_FORMATTER);} catch (DateTimeParseException e) {// 格式错误处理throw new IllegalArgumentException("日期格式错误,应为 yyyy-MM-dd,并且为有效日期", e);}}/*** 转换为开始时间(当天的开始时刻 00:00:00)* @param dateStr 字符串* @return LocalDateTime 格式的日期时间*/public static LocalDateTime parseBeginDateTime(String dateStr) {return parseDate(dateStr).atStartOfDay();}/*** 转换为结束时间(当天的最后一刻 23:59:59.999999999)* @param dateStr 字符串* @return LocalDateTime 格式的日期时间*/public static LocalDateTime parseEndDateTime(String dateStr) {return parseDate(dateStr).atTime(LocalTime.MAX);}/*** 将字符数组转换为日期数组,如:["2025-06-01", "2026-06-10"] 转换为 [beginDate, endDate]* @param dateStrList 字符数组* @return 日期数组,只限开始日期和结束日期,[beginDate, endDate]*/public static List<LocalDate> parseDateRange(List<String> dateStrList) {List<LocalDate> dateList = new ArrayList<>();if (dateStrList == null || dateStrList.size() != 2) {dateList.add(LocalDate.now());dateList.add(LocalDate.now());} else {try {dateList.add(parseDate(dateStrList.get(0)));dateList.add(parseDate(dateStrList.get(1)));} catch (DateTimeParseException e) {dateList.add(LocalDate.now());dateList.add(LocalDate.now());}}// 检查日期逻辑关系,开始时间大于结束时间if (dateList.get(0).isAfter(dateList.get(1))) {LocalDate maxDate = dateList.get(0);dateList.set(0, dateList.get(1));dateList.set(1,maxDate);}return dateList;}/*** 将字符数组转换为日期数组,如:["2025-06-01", "2026-06-10"] 转换为 [beginDateTime, endDateTime]* @param dateStrList 字符数组* @return 时间数组,只限开始时间和结束时间,[beginDateTime, endDateTime]*/public static List<LocalDateTime> parseDateTimeRange(List<String> dateStrList) {List<LocalDate> dateList = parseDateRange(dateStrList);List<LocalDateTime> dateTimeList = new ArrayList<>();dateTimeList.add(dateList.get(0).atStartOfDay());dateTimeList.add(dateList.get(1).atTime(LocalTime.MAX));return dateTimeList;}
}

http://www.dtcms.com/wzjs/28271.html

相关文章:

  • 自己有服务器怎么做网站搜关键词网站
  • 哪个网站专门做邮轮旅游的怎么在百度上发表文章
  • 做鲜花配送网站需要准备什么网络营销师证书需要多少钱
  • 广州网站建设信科便宜鹤壁搜索引擎优化
  • 毕业设计h5网站制作最新的疫情情况
  • 做科技公司的网站公司今天发生的重大新闻
  • 东莞公司网站建设小知识今天全国疫情最新消息
  • 北京网络公司有哪些seo数据统计分析工具有哪些
  • 网站建设色系搭配公司做个网站多少钱
  • 化妆品网站建设思路东莞网站自动化推广
  • 设计网站公司 生活湖南岚鸿搜索引擎分哪三类
  • 网站建设的目的是什么域名解析查询工具
  • b2b网站开发合同商务网站建设
  • 焦作建设网站的公司网站在线制作
  • 做网站定金是多少钱网站快速优化排名排名
  • 网站地图模板下载怎样在百度答题赚钱
  • 旅游电子商务网站的建设淘宝搜索关键词排名查询工具
  • dede单本小说网站源码关键词投放
  • 福州网站建设网络公司南宁seo公司哪家好
  • 免费的发帖收录网站在哪里做推广效果好
  • 企业还有人做网站么网站超级外链
  • app是如何开发出来的杭州seo按天计费
  • p2p网站建设公司排名各种推广平台
  • 网站建设的成功之处有哪些站长之家网站介绍
  • 文字做图网站网站查询ip地址查询
  • 网页制作与网站建设试题线上广告推广
  • 义乌网站建设电话企业网站优化排名
  • 济南手机网站定制费用seo推广灰色词
  • 榆林网站开发百度应用
  • 东莞建设培训中心网站百度搜索广告怎么收费