Rumah > Soal Jawab > teks badan
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
Jika anda tidak menggunakan 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
Saya nampak seseorang telah pun menyebut Java8 sebelum ini...tetapi cara penulisan ini agak janggal...Semua orang pada dasarnya mempunyai idea yang sama...
Masa mula yang diberikan hendaklah ditukar kepada hari pertama bulan semasa
Waktu tamat yang diberikan hendaklah ditukar kepada hari terakhir bulan semasa
Kuncinya ialah bagaimana untuk menukar... Dalam Java 8, terdapat API siap pakai yang boleh dipanggil... Tidak perlu menghurai... Tidak mengapa untuk menjadi hari pertama, tetapi ada banyak masalah untuk menjadi Penghakiman hari terakhir...
Kod adalah seperti berikut mengikut syarat yang diberikan, kaedah isBetween ditulis
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);
}
Penjelasan ringkas...
yyyy-mm mempunyai kelas baharu dalam Java8 untuk mengendalikan format tahun dan bulan Ini ialah YearMonth
(ia adalah kelas pelaksanaan TemporalAdjuster
). kaedah LocalDate
(yang merupakan kelas pelaksanaan Temporal
) sebenarnya adalah kaedah dengan antara muka Temporal
Ini melibatkan reka bentuk API masa baharu Java 8. Tandatangan kaedah dengan adalah seperti berikut <🎜. >
bermaksud: objek boleh dilaraskan mengikut objek Temporal
TemporalAdjuster
ALocalDate
(panggil kaedah dengan), iaitu, laraskan tahun dan bulan masa, dan dapatkan masa BYearMonth
(TemporalAdjuster
), laraskan hari dalam masa dan dapatkan masa terakhir TemporalAdjusters.firstDayOfMonth
... Ia juga mudah, mudah dan mudah digunakan Anda boleh memberi perhatian kepada kelas ini TemporalAdjusters
ringa_lee2017-04-18 10:55:56
Jika anda menggunakan 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
Jika anda tidak menggunakan Java8 tetapi menggunakan 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
akhir hendaklah ditukar kepada hari terakhir bulan ini, contohnya 2017-06-30
;
, maka hanya gunakan yyyy-mm
;
yyyy-mm-dd
date.compareTo(start) >= 0 && date.compareTo(end) < 0
Jika terdapat format bukan standard, seperti