java比较时间

 渊博的效力 发布于 2022-10-25 07:53

String date1 = “2017-04-06”;
String start = "2017-04";
String end = "2017-06";
java 计算data1是否在start和end之间。start和end即表示的是四月到六月

5 个回答
    1. end要转换成这个月的最后一天,比如说2017-06-30

    2. 如果格式确定为yyyy-mmyyyy-mm-dd,那么用date.compareTo(start) >= 0 && date.compareTo(end) < 0就可以了;

    3. 如果有不规范的格式,比如2017-4-6,要么转换成规范的格式,要么都转换成Date或long(Date本质就是long),再进行比较。

    2022-10-26 14:33 回答
  • 如果你没用Java8但用了Joda-time:

      public boolean between(String date){
        String start = "2017-04";
        String end = "2017-06";
        try {
            return DateTime.parse(date).isAfter(DateTime.parse(start).withDayOfMonth(1).toInstant())
                && DateTime.parse(date).isBefore(DateTime.parse(end).plusMonths(1).withDayOfMonth(1).minusDays(1).toInstant());
        }catch (Exception e){
            return false;
        }
    }
    2022-10-26 14:33 回答
  • 如果你用上了 Java8:

    import java.time.LocalDate;
    
    public class What {
    
        public static void main(String[] args) throws Exception {
            String date1 = "2017-04-06";
            String start = "2017-04";
            String end = "2017-06";
    
            LocalDate date = LocalDate.parse(date1);
    
            LocalDate startDate = LocalDate.parse(start + "-01");
            LocalDate endDate = LocalDate.parse(end + "-01");
            
            endDate = endDate.plusDays(endDate.getMonth().maxLength());
            
            if (date.isAfter(startDate) && date.isBefore(endDate)) {
                System.out.println("data1 在 start 和 end 之间");
            } else {
                System.out.println("data1 不在 start 和 end 之间");
            }
        }
        
    }
    
    2022-10-26 14:33 回答
  • 我看前面已经有人说到Java8了...不过这个写法是有点尴尬...思路大家基本一样...

    1. 给的start时间要变为当前月的第一天

    2. 给的end时间要变为当前月的最后一天

    关键是如何变的问题...Java8的时间是有现成的API可以调用的...不需要parse这种方式...变成第一天还好,变成最后一天有诸多的判断...

    代码如下,按照所给条件,写了一个isBetween方法

    public static boolean isBetween(String date, String start, String end){
            // 把start转化为start所在月份的第一天
            LocalDate startDate = LocalDate.now().with(YearMonth.parse(start)).with(TemporalAdjusters.firstDayOfMonth());
    
            // 把end转化为end所在月份的最后一天
            LocalDate endDate = LocalDate.now().with(YearMonth.parse(end)).with(TemporalAdjusters.lastDayOfMonth());
    
            // 把date转化为LocalDate
            LocalDate currentDate = LocalDate.parse(date);
    
            return currentDate.isAfter(startDate) && currentDate.isBefore(endDate);
        }

    简单解释一下...
    yyyy-mm这种年月的形式在Java8中已经有新的类来处理,这就是YearMonth(它是一个TemporalAdjuster的实现类),根据LocalDate(它是一个Temporal的实现类)的with方法,其实是Temporal接口的with方法,这里涉及到Java8的新时间API的设计,with方法签名如下

    含义即是:一个Temporal对象可以根据一个TemporalAdjuster对象进行调整

    所以结合到上面写的代码,思路如下

    1. 随意取了当前时间LocalDate A

    2. 把A根据传入的YearMonth进行修改(调用with方法),即调整时间的年和月,得到时间B

    3. 把B再根据一个调整器TemporalAdjusterTemporalAdjusters.firstDayOfMonth),调整时间的日,得到最后的时间

    其实时间调整,在TemporalAdjusters中已经封装了不少常用的了...用起来也简单直白好用的,可以关注这个类

    最后,提供一个我以前自己简单连的Java8新时间API的一些关系,跟着这些关系可以再看看具体类,捋捋关系,会发现新时间API不但好用还很强大

    2022-10-26 14:34 回答
  • 如果你没用Java8:

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Main {
    
        public static void main(String[] args) throws ParseException {
            String date1 = "2017-06-06";
            String start = "2017-04";
            String end = "2017-06";
    
            Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(date1);
            Date dStart = new SimpleDateFormat("yyyy-MM").parse(start);
            Calendar c = Calendar.getInstance();
            c.setTime(new SimpleDateFormat("yyyy-MM").parse(end));
            c.add(Calendar.MONTH, 1);
            Date dEnd = c.getTime();
    
            if (d1.after(dStart) && d1.before(dEnd)) {
                System.out.println("true");
            } else {
                System.out.println("false");
            }
    
        }
    
    }
    
    2022-10-26 14:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有