java比较时间
伊谢尔伦
伊谢尔伦 2017-04-18 10:53:56
0
5
629

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

répondre à tous(5)
PHPzhong

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

    }

}
巴扎黑

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

左手右手慢动作

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 之间");
        }
    }
    
}
小葫芦

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;
    }
}
洪涛
  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.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal