如何判断dd.MM.yyyy格式的字符串日期是否为未来日期?
判断dd.MM.yyyy格式日期是否为未来日期的解决方案
首先说一句,别再用SimpleDateFormat和Date类了——这俩是Java老掉牙的日期API,线程不安全还设计反人类,坑特别多。直接用Java 8及以上版本自带的java.time包,用LocalDate和DateTimeFormatter处理,简单又靠谱。
步骤和代码:
- 用
DateTimeFormatter定义dd.MM.yyyy的格式,把字符串转成LocalDate(只存年月日,没有时间,正好符合你的需求)。 - 获取当前日期的
LocalDate对象。 - 调用
isAfter()方法直接判断目标日期是否在当前日期之后(也就是你要的“今日之后,含明日及以后”)。
完整代码:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 示例代码 String profileUpdateChangeDate = "31.01.2023"; // 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); // 把字符串解析成LocalDate LocalDate changeDate = LocalDate.parse(profileUpdateChangeDate, formatter); // 获取当前日期(自动忽略时分秒) LocalDate currentDate = LocalDate.now(); // 判断是否为未来日期:changeDate在currentDate之后就是符合要求的 boolean isFutureDate = changeDate.isAfter(currentDate); // 打印日志 _log.info("changeDate====>>> " + changeDate); _log.info("Currentdate-====> " + currentDate); _log.info("是否为未来日期:" + isFutureDate);
要是你非得用旧API(真心不推荐):
如果因为环境限制只能用SimpleDateFormat和Date,得注意一个坑:你解析出来的changeDate时间是当日00:00:00,但new Date()拿的是当前精确时间(比如下午3点),直接比较的话,今天的日期会被当成“非未来”,但其实如果目标日期是今天的话,你的需求是不算的(要今日之后)。所以得把当前日期也转成当日0点的Date再比。
代码示例:
import java.text.SimpleDateFormat; import java.util.Date; String profileUpdateChangeDate = "31.01.2023"; SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); Date changeDate = sdf.parse(profileUpdateChangeDate); // 把当前日期转成当日0点的Date对象 Date currentDate = sdf.parse(sdf.format(new Date())); // 判断:changeDate晚于当前0点,就是未来日期 boolean isFutureDate = changeDate.after(currentDate); _log.info("changeDate====>>> " + changeDate); _log.info("Currentdate-====> " + sdf.format(currentDate)); _log.info("是否为未来日期:" + isFutureDate);
关于你看到的日期格式问题:
你打印changeDate时显示的EEE MMM dd HH:mm:ss zzz yyyy,只是Date类默认的toString()输出格式,不影响日期的实际值,只要你解析时用对了dd.MM.yyyy格式,日期的内部值是正确的,只是打印出来的样子不一样而已。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

