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

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

伊谢尔伦
伊谢尔伦

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

membalas semua(5)
PHPzhong

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

    }

}
巴扎黑

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

左手右手慢动作

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

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;
    }
}
洪涛
  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.
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!