当前位置:首页 > 问答 > 正文

日期处理|时间操作|java获取昨天的日期、java怎么获取昨天的日期的方法与示例

📅 Java获取昨天日期的几种实用方法(附代码示例)

场景引入
早上9点,程序员小张突然接到需求:"统计系统昨天的订单数据",他盯着new Date()发愁——"Java里怎么快速获取昨天的日期呢?" 🤔 别急!今天我们就用5分钟彻底掌握这个高频操作!


⏰ 方法一:Calendar老将出马(传统但可靠)

import java.util.Calendar;
import java.text.SimpleDateFormat;
public class YesterdayDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, -1);  // 关键代码!日期-1天
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("昨天的日期是:" + sdf.format(calendar.getTime()));
        // 输出示例(假设今天是2025-08-20):2025-08-19
    }
}

🔹 优点:兼容所有Java版本
🔹 注意Calendar.MONTH是从0开始计数的(1月=0)


🚀 方法二:LocalDate新时代(Java 8+推荐)

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class YesterdayDemo8 {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate yesterday = today.minusDays(1);  // 优雅的链式调用
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        System.out.println("昨天的日期是:" + yesterday.format(formatter));
        // 输出示例:2025年08月19日
    }
}

优势

日期处理|时间操作|java获取昨天的日期、java怎么获取昨天的日期的方法与示例

  • 线程安全
  • 代码更简洁
  • 支持时区处理(搭配ZonedDateTime

⚡ 方法三:Instant时间戳转换(适合全局时间)

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class YesterdayInstant {
    public static void main(String[] args) {
        Instant now = Instant.now();
        Instant yesterdayInstant = now.minusSeconds(24 * 60 * 60);  // 减去24小时
        System.out.println("昨天此刻时间戳:" + yesterdayInstant);
        // 转换为本地日期
        System.out.println("本地昨天日期:" + 
            yesterdayInstant.atZone(ZoneId.systemDefault())
                           .toLocalDate());
    }
}

🌍 适用场景:需要处理跨时区的时间计算


📝 小贴士:边界情况处理

  1. 跨月/跨年自动处理

    日期处理|时间操作|java获取昨天的日期、java怎么获取昨天的日期的方法与示例

    LocalDate newYearDay = LocalDate.of(2025, 1, 1);
    System.out.println("前一天是:" + newYearDay.minusDays(1)); 
    // 自动输出:2024-12-31
  2. 工作日计算
    需要结合TemporalAdjusters

    LocalDate yesterday = LocalDate.now().minusDays(1);
    if (yesterday.getDayOfWeek() == DayOfWeek.SUNDAY) {
        System.out.println("昨天是周日哦~");
    }

🏆 终极对比表

方法 线程安全 代码简洁度 是否需要处理时区 Java版本要求
Calendar 需要 1+
LocalDate 不需要 8+
Instant 需要 8+

日期处理|时间操作|java获取昨天的日期、java怎么获取昨天的日期的方法与示例

  • 旧项目维护 → 用Calendar 📜
  • 新项目开发 → 首选LocalDate 🎯
  • 需要精确到毫秒 → 选Instant ⏱️

现在小张可以轻松完成任务啦!如果遇到闰秒问题...那就是另一个故事了 😉 (注:Java默认不处理闰秒)

发表评论