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

java比较时间

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

伊谢尔伦伊谢尔伦2743 Il y a quelques jours585

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

  • PHPz

    PHPz2017-04-18 10:55:56

    Si vous n'utilisez pas 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");
            }
    
        }
    
    }
    

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:55:56

    Je vois que quelqu'un a déjà mentionné Java8 auparavant... mais cette façon d'écrire est un peu gênante... Tout le monde a fondamentalement la même idée...

    1. L'heure de début indiquée doit être modifiée au premier jour du mois en cours

    2. L'heure de fin indiquée doit être modifiée au dernier jour du mois en cours

    La clé est de savoir comment changer... Dans Java 8, il existe des API prêtes à l'emploi qui peuvent être appelées... Il n'y a pas besoin d'analyser... C'est bien de devenir le premier jour, mais il y en a beaucoup problèmes jusqu'au Jugement dernier jour...

    Le code est le suivant Selon les conditions données, une méthode isBetween est écrite

    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);
        }

    Une brève explication...
    aaaa-mm a une nouvelle classe en Java8 pour gérer le format de l'année et du mois. Il s'agit de YearMonth (c'est une classe d'implémentation de TemporalAdjuster selon The with). La méthode de LocalDate (qui est une classe d'implémentation de Temporal) est en fait la méthode with de l'interface Temporal. Cela implique la conception de la nouvelle API temporelle de Java 8. La signature de la méthode with est la suivante <🎜. >

    signifie : un objet peut être ajusté en fonction d'un Temporal objet TemporalAdjuster

    Donc combiné avec le code écrit ci-dessus, l'idée est la suivante

    1. J'ai pris l'heure actuelle au hasard

      ALocalDate

    2. Modifiez A en fonction de ce qui est passé dans

      (appelez la méthode with), c'est-à-dire ajustez l'année et le mois de l'heure, et obtenez l'heure BYearMonth

    3. Mettez B selon un ajusteur

      (TemporalAdjuster), ajustez le jour de l'heure, et obtenez l'heure finale TemporalAdjusters.firstDayOfMonth

    En fait, de nombreux ajustements de temps couramment utilisés ont été encapsulés dans

    ... C'est également simple, direct et facile à utiliser. Vous pouvez faire attention à cette classe TemporalAdjusters.

    Enfin, je fournis quelques relations entre la nouvelle API Java 8 que j'ai simplement connectée auparavant. Suite à ces relations, vous pouvez examiner les classes et les relations spécifiques. Vous constaterez que la nouvelle API temporelle n'est pas seulement facile à utiliser. mais aussi très puissant

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:55:56

    Si vous utilisez 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 之间");
            }
        }
        
    }
    

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 10:55:56

    Si vous n'utilisez pas Java8 mais utilisez 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;
        }
    }

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:55:56

    1. end doit être converti au dernier jour de ce mois, par exemple 2017-06-30;

    2. Si le format est déterminé comme étant
    3. ou

      , utilisez simplement yyyy-mm ; yyyy-mm-dddate.compareTo(start) >= 0 && date.compareTo(end) < 0S'il existe un format non standard, tel que

      , convertissez-le en format standard ou convertissez-le en Date ou en long (la Date est essentiellement longue), puis comparez.
    4. répondre
      0
  • Annulerrépondre