 闽公网安备 35020302035485号
                
                闽公网安备 35020302035485号
                // 想获取2023年10月1日?祝你好运! Date date = new Date(123, 9, 1); // 年份=2023-1900=123,月份从0开始 System.out.println(date.getYear()); // 输出123,当场裂开2. 线程安全的“惊天大雷”
// 堆代码 duidaima.com
// 多线程环境下共享一个SimpleDateFormat?直接埋雷!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 线程A:sdf.parse("2023-10-01");
// 线程B:sdf.parse("2024-05-20"); 
// 结果可能互相覆盖,返回错误日期!
3. 时区处理全靠“玄学”LocalDate date = LocalDate.of(2023, 10, 1); System.out.println(date.getYear()); // 2023!正常了! System.out.println(date.getMonth()); // OCTOBER!感动!2. 不可变性(Immutable)YYDS
LocalDate date1 = LocalDate.now(); LocalDate date2 = date1.plusDays(7); // 返回新对象,date1不变3. 链式调用爽到飞起
// 计算“明年情人节之后第100天的日期”
LocalDate result = LocalDate.now()
    .withYear(2024)             // 跳到2024年
    .withMonth(2)               // 2月
    .withDayOfMonth(14)         // 14号
    .plusDays(100);             // 加100天
4. 时区处理明明白白Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); long diff = (cal2.getTimeInMillis() - cal1.getTimeInMillis()) / (24 * 60 * 60 * 1000); // 小心闰年!小心夏令时!算错了别怪我!LocalDate版(优雅永不过时):
long diff = ChronoUnit.DAYS.between(date1, date2); // 一行搞定!场景2:判断某个日期是否是闰年
Calendar cal = Calendar.getInstance(); cal.setTime(date); int year = cal.get(Calendar.YEAR); boolean isLeap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);LocalDate版(直接开挂):
boolean isLeap = date.isLeapYear(); // 内置方法!四、迁移指南:如何无痛替换Date?
<!-- Maven依赖 -->
<dependency>
    <groupId>org.threeten</groupId>
    <artifactId>threetenbp</artifactId>
    <version>1.6.8</version>
</dependency>
2. 数据库交互:JDBC直接支持// 写入数据库
preparedStatement.setObject(1, LocalDate.now());
// 读取数据库
LocalDate date = resultSet.getObject("column", LocalDate.class);
3. JSON序列化:Jackson一键配置<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
五、总结:早换早解脱,晚换等着哭面试时被问日期处理,大谈LocalDate,逼格瞬间拉满!