Rumah  >  Soal Jawab  >  teks badan

java比较时间

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

伊谢尔伦伊谢尔伦2743 hari yang lalu592

membalas semua(5)saya akan balas

  • PHPz

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

    balas
    0
  • 巴扎黑

    巴扎黑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...

    1. Masa mula yang diberikan hendaklah ditukar kepada hari pertama bulan semasa

    2. 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

    Jadi digabungkan dengan kod yang ditulis di atas, ideanya adalah seperti berikut

    1. Saya mengambil masa semasa secara rawak

      ALocalDate

    2. Ubah suai A mengikut yang diluluskan dalam

      (panggil kaedah dengan), iaitu, laraskan tahun dan bulan masa, dan dapatkan masa BYearMonth

    3. Letakkan B mengikut pelaras

      (TemporalAdjuster), laraskan hari dalam masa dan dapatkan masa terakhir TemporalAdjusters.firstDayOfMonth

    Malah, banyak pelarasan masa yang biasa digunakan telah dirangkumkan dalam

    ... Ia juga mudah, mudah dan mudah digunakan Anda boleh memberi perhatian kepada kelas ini TemporalAdjusters

    Akhir sekali, saya menyediakan beberapa perhubungan antara API masa baharu Java 8 yang saya sambungkan sebelum ini, anda boleh melihat kelas dan perhubungan tertentu Anda akan mendapati bahawa API masa baharu bukan sahaja mudah digunakan tetapi juga sangat berkuasa

    balas
    0
  • ringa_lee

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

    balas
    0
  • 高洛峰

    高洛峰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;
        }
    }

    balas
    0
  • PHP中文网

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

    1. akhir hendaklah ditukar kepada hari terakhir bulan ini, contohnya 2017-06-30;

    2. Jika format ditentukan sebagai
    3. atau

      , maka hanya gunakan yyyy-mm; yyyy-mm-dddate.compareTo(start) >= 0 && date.compareTo(end) < 0Jika terdapat format bukan standard, seperti

      , sama ada tukarkannya kepada format standard atau tukarkannya kepada Tarikh atau panjang (Tarikh pada dasarnya panjang), dan kemudian bandingkan.
    4. balas
      0
  • Batalbalas