java 对日期获取前一天,对传入的日期跟获取本机日期进行比较返回早的日期

该博客主要介绍了如何使用Java获取日期的前一天,并且对比传入日期与当前系统日期,返回两者中较早的日期。内容包括对指定日期20200915和系统日期20200916的比较示例。

对传入的日期获取前一天

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DataTool {
    // TODO: 2020/9/16 获取昨天日期

   public static String getYesterday(String dataDate){
       SimpleDateFormat sj = new SimpleDateFormat("yyyyMMdd");
       Date parse=null;
       try {
            parse = sj.parse(dataDate);
       } catch (ParseException e) {
           e.printStackTrace();
       }
       Calendar instance = Calendar.getInstance();
       instance.setTime(parse);
       instance.add(Calendar.DATE,-1);
       String yesterday = sj.format(instance.getTime());
       return yesterday;
   }


   public class DateExecture {
    public static void main(String[] args) {

        String yesterday = DataTool.getYesterday("20200301");
        System.out.println(yesterday);

  
    }

}

对传入的日期跟获取本机日期进行比较返回早的日期

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DataTool {
    // TODO: 2020/9/16 两个日期比较取小的(一个日期是传入的 一个是获取本机日期)

   public static String getBeforeDate(String dataDate){
       SimpleDateFormat sj = new SimpleDateFormat("yyyyMMdd");
       Calendar instance = Calendar.getInstance();

       instance.setTime(new Date());
       String dataDateNow = sj.format(instance.getTime());

       Date dateNow=null;
       Date dateInput=null;
       try {
           dateNow = sj.parse(dataDateNow);
           dateInput = sj.parse(dataDate);
       } catch (ParseException e) {
           e.printStackTrace();
       }
       if (dateNow.before(dateInput)){
           return dataDateNow;
       }else {
           return dataDate;
       }

   }
}


public class DateExecture {
    public static void main(String[] args) {

        String beforeDate = DataTool.getBeforeDate("20200915");
        System.out.println(beforeDate);
    }

}

注意:比较的两个日期,一个传入的是:20200915  本机时间为:2020916

<think>根据用户问题,需要实现获取当前日期前一天Java方法。参考引用内容,有两种常用方法:使用Calendar类使用java.time包(现代方式)。用户提供的引用主要使用Calendar类,但考虑到Java 8及以上版本推荐使用java.time包,因此我将提供两种实现方式。 1. 使用传统的Calendar类(适用于旧版Java) 2. 使用java.time.LocalDate(适用于Java 8及以上) 另外,用户问题要求获取当前日期前一天,所以重点在第一个方法。 注意:用户提供的引用[1]中有两个方法,其中beforeDayByNowDay方法正是获取当前日期前一天。 但引用[2]中使用了设置小时的方式(calendar.set(Calendar.HOUR_OF_DAY,-24))来减一天,这种方法并不推荐,因为可能会因夏令时等问题导致错误。 因此,我们采用引用[1]中第一个方法的方式:使用Calendar的add方法,将日期减去1天。 同时,考虑到现代Java应用,我们也会提供java.time的解决方案。 步骤: 1. 使用Calendar类(传统方式) 2. 使用LocalDate(Java 8+) 注意:用户没有指定日期格式,所以我们可以返回一个字符串,并允许用户指定格式。 根据引用[1]的方法,我们写一个类似的方法,传入日期格式字符串,返回前一天日期字符串。 另外,由于用户只需要当前日期前一天,我们可以只实现类似beforeDayByNowDay的方法。 但是,为了完整性,我们也可以提供一个获取指定日期前一天的方法(如引用[1]中的第二个方法),但用户当前问题只要求当前日期。 因此,我们主要实现当前日期前一天获取,同时提一下指定日期前一天获取。 代码示例: </think> ### Java获取当前日期上一日的实现方法 在Java获取当前日期前一天有两种常用方法,下面是详细的实现方案: #### 1. 使用`Calendar`类(传统方式,兼容旧版Java) ```java import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtils { /** * 获取当前日期前一天 * @param pattern 日期格式(如:"yyyy-MM-dd") * @return 前一天日期字符串 */ public static String getPreviousDay(String pattern) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); // 日期减1天 Date previousDate = calendar.getTime(); return new SimpleDateFormat(pattern).format(previousDate); } } ``` **使用示例**: ```java String yesterday = DateUtils.getPreviousDay("yyyy-MM-dd"); // 输出示例:2023-10-31(假设当前日期是2023-11-01) ``` #### 2. 使用`java.time` API(Java 8+推荐方式) ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class DateUtils { /** * 获取当前日期前一天 * @param pattern 日期格式(如:"yyyy-MM-dd") * @return 前一天日期字符串 */ public static String getPreviousDay(String pattern) { LocalDate today = LocalDate.now(); LocalDate yesterday = today.minusDays(1); // 直接减1天 return yesterday.format(DateTimeFormatter.ofPattern(pattern)); } } ``` **使用示例**: ```java String yesterday = DateUtils.getPreviousDay("yyyy/MM/dd"); // 输出示例:2023/10/31(假设当前日期是2023-11-01) ``` #### 关键点说明 1. **日期操作**: - `Calendar.add(Calendar.DATE, -1)`:通过字段操作减少天数 - `LocalDate.minusDays(1)`:更直观的日期计算 2. **线程安全**: - `SimpleDateFormat`非线程安全,需每次创建新实例 - `DateTimeFormatter`是线程安全的推荐方案[^1] 3. **时区处理**: - 默认使用系统时区 - 需要指定时区时,可使用`LocalDate.now(ZoneId.of("Asia/Shanghai"))` 4. **异常处理**: - 无效格式会抛出`IllegalArgumentException` - 建议在调用层捕获异常 > 推荐优先使用Java 8的`java.time` API,其设计更清晰且避免了`Calendar`类的月份从0开始等陷阱[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值