recherche

Maison  >  Questions et réponses  >  le corps du texte

java 已知两个日期,遍历出两个日期之间所有的日期,重点是::包括第一个日期!!

String timeStart = "2016-12-11";
String timeEnd = "2016-12-20";

已知两个日期,怎么循环出 [timeStart - timeEnd] 的所有日期,包括开始和结束时间。
并存入一个List<String>的集合中

迷茫迷茫2888 Il y a quelques jours713

répondre à tous(5)je répondrai

  • PHPz

    PHPz2017-04-18 10:32:22

    Haha, c'est encore un problème de date, alors je vous recommande vivement d'utiliser la nouvelle API time de Java 8, et votre chaîne d'heure est toujours dans ce format yyyy-MM-dd, vous pouvez convertir la chaîne en LocalDate directement en utilisant le LocalDate.parse méthode Cible

    De plus, si cela implique une série de collections temporelles régulières, vous devez alors envisager Stream. Il est très pratique et rapide d'utiliser Stream pour construire votre collection.

       /**
         * 收集起始时间到结束时间之间所有的时间并以字符串集合方式返回
         * @param timeStart
         * @param timeEnd
         * @return
         */
        public static List<String> collectLocalDates(String timeStart, String timeEnd){
            return collectLocalDates(LocalDate.parse(timeStart), LocalDate.parse(timeEnd));
        }
    
        /**
         * 收集起始时间到结束时间之间所有的时间并以字符串集合方式返回
         * @param start
         * @param end
         * @return
         */
        public static List<String> collectLocalDates(LocalDate start, LocalDate end){
            // 用起始时间作为流的源头,按照每次加一天的方式创建一个无限流
            return Stream.iterate(start, localDate -> localDate.plusDays(1))
                         // 截断无限流,长度为起始时间和结束时间的差+1个
                         .limit(ChronoUnit.DAYS.between(start, end) + 1)
                         // 由于最后要的是字符串,所以map转换一下
                         .map(LocalDate::toString)
                         // 把流收集为List
                         .collect(Collectors.toList());
        }

    Puis le code du test :

            String timeStart = "2016-12-11";
            String timeEnd = "2016-12-20";
    
            collectLocalDates(timeStart, timeEnd).forEach(System.out::println);

    Voici le résultat de l'impression :

    Facile à utiliser~~Parfaitement élégant et facile à comprendre Java8~Haha

    répondre
    0
  • 阿神

    阿神2017-04-18 10:32:22

    Vous calculez le nombre de jours entre deux dates et ajoutez 1 en boucle Si la date ajoutée est égale à la date ultérieure, tout ira bien

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:32:22

     思路就是这样:
     public static List<Integer> getYear(int startYear,int endYear) {
            List<Integer> years = new ArrayList<Integer>();
            while (startYear <= endYear) {
                years.add(startYear);
                startYear++;
            }
            return years;
        }

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:32:22

    SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-jj");

        try {
            Date begin = sdf.parse("2016-12-11");
            Date end = sdf.parse("2016-12-20");
            List<String> l = new ArrayList<String>();
            Calendar cal = Calendar.getInstance();
            while (begin.before(end)) {
                l.add(sdf.format(begin));
                cal.setTime(begin);
                cal.add(Calendar.DAY_OF_MONTH, 1);
                begin = cal.getTime();
            }
            for(String s:l){
                System.out.println(s);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:32:22

    Vous avez besoin du package lang d'Apache, qui possède l'API suivante

    static Date addDays(Date date, int montant) Renvoie un nouvel objet Date après avoir ajouté le montant jours à un objet date time
    static Date addHours(Date date, int montant) Renvoie un nouvel objet Date time après avoir ajouté le montant h Objet Date
    static Date addMilliseconds(Date date, int montant) Renvoie un objet date/heure après avoir ajouté un montant en millisecondes au nouvel objet Date
    static Date addMinutes(Date date, int montant) Renvoie un objet date/heure ajoutant un montant Nouveau Objet Date après minutes
    static Date addMonths(Date date, int montant) Renvoie un objet date time Ajouter montant Nouvel objet Date après mois
    static Date addSeconds(Date date, int montant) Renvoie une date Un nouvel objet Date après ajout d'un nombre de secondes à l'objet temps
    static Date addWeeks(Date date, int montant) Renvoie un nouvel objet Date après avoir ajouté un nombre de semaines à l'objet date time
    static Date addYears(Date date, int montant) ) Renvoie un objet date heure et un nouvel objet Date après avoir ajouté le montant des années

    Adresse de l'article

    répondre
    0
  • Annulerrépondre