Maison > Questions et réponses > le corps du texte
String date1 = “2017-04-06”;
String start = "2017-04";
String end = "2017-06";
java 计算data1是否在start和end之间。start和end即表示的是四月到六月
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");
}
}
}
巴扎黑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...
L'heure de début indiquée doit être modifiée au premier jour du mois en cours
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
ALocalDate
(appelez la méthode with), c'est-à-dire ajustez l'année et le mois de l'heure, et obtenez l'heure BYearMonth
(TemporalAdjuster
), ajustez le jour de l'heure, et obtenez l'heure finale TemporalAdjusters.firstDayOfMonth
... C'est également simple, direct et facile à utiliser. Vous pouvez faire attention à cette classe TemporalAdjusters
.
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 之间");
}
}
}
高洛峰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;
}
}
PHP中文网2017-04-18 10:55:56
end doit être converti au dernier jour de ce mois, par exemple 2017-06-30
;
, utilisez simplement yyyy-mm
;
yyyy-mm-dd
date.compareTo(start) >= 0 && date.compareTo(end) < 0
S'il existe un format non standard, tel que