Подсчет дней между датами, хранящимися в базе данных MySQL, и текущей датой с помощью NetBeans Java - PullRequest
0 голосов
/ 14 октября 2019

Мне нужно вычислить разницу между двумя датами в днях .. первая из которых должна быть текущей датой, а следующая уже обработана в базе данных Mysql.

Mysql формат даты сохраненной датыэто гггг-ММ-дд

И я просто взял сохраненную дату через текстовое поле. Пожалуйста, помогите мне решить эту проблему!

Ответы [ 3 ]

1 голос
/ 14 октября 2019

java.time

Если вы сохранили дату в виде текста, выполните синтаксический анализ как LocalDate.

LocalDate localDate = LocalDate.parse( input ) ;

Если вы более правильно сохранили дату встолбец типа, подобного стандартному SQL-типу DATE, извлекается как LocalDate.

LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;

Захватывает текущую дату, как видно из времени настенных часов, используемого людьми определенногорегион (часовой пояс).

ZoneId z = ZoneId.of( "America/Montreal" ) ;

LocalDate today = LocalDate.now( z ) ;

Рассчитать время прыжка в днях.

long days = ChronoUnit.DAYS.between( localDate , today ) ;

Table of date-time types in Java (both legacy and modern) and in standard SQL

Совет. Чтобы представить диапазон дат, пару LocalDate объектов, добавьте ThreeTen-Дополнительная библиотека для вашего проекта. Используйте класс LocalDateRange.

LocalDateRange range = LocalDateRange.of( localDate , today ) ;

О java.time

Среда java.time встроена в Java 8и позже. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация: JSR 310 .

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time классы.

Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большинство функций java.time перенесено в Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии комплектов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше). См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и more .

1 голос
/ 14 октября 2019

Вы можете SimpleDateFormat проанализировать даты в текстовых полях и затем найти разницу между ними следующим образом:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

class Main {
    public static void main(String args[]) {
        String date1Str = "2019-11-11";// replace this value with the text from your first textfield
        String date2Str = "2019-10-11";// replace this value with the text from your second textfield

        Date date1 = null, date2 = null;
        try {
            date1 = new SimpleDateFormat("yyyy-MM-dd").parse(date1Str);
            date2 = new SimpleDateFormat("yyyy-MM-dd").parse(date2Str);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        Calendar cal1 = new GregorianCalendar();
        cal1.setTime(date1);

        Calendar cal2 = new GregorianCalendar();
        cal2.setTime(date2);

        //Test
        System.out.println("No of days between " + date1Str + " and " + date2Str + " is "
                + daysBetween(cal1.getTime(), cal2.getTime()));

    }

    static int daysBetween(Date d1, Date d2) {
        return (int) ((d1.getTime() - d2.getTime()) / (1000 * 60 * 60 * 24));
    }
}

Вывод:

No of days between 2019-11-11 and 2019-10-11 is 31
0 голосов
/ 15 октября 2019
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;

 private void CountDaysActionPerformed(java.awt.event.ActionEvent evt) {                                          

        //check your zone Id and place it on the double quote 
        ZoneId z=ZoneId.of("Asia/Colombo");
        LocalDate today=LocalDate.now(z);

        String currentDate=today.toString();

        SimpleDateFormat myformat=new SimpleDateFormat("yyyy-MM-dd");

        String firstDate1 =jTextField1.getText();
        String secondDate1 =currentDate;

        try{

            Date firstDate = myformat.parse(firstDate1);
            Date secondDate = myformat.parse(secondDate1);

            long dif = secondDate.getTime()- firstDate.getTime();

            int daysBetween =(int) (dif/(1000*60*60*24));


            //answer wil be the difference between your current date and the date you provided in the jTextField1
            System.out.println(daysBetween);


        }catch(Exception e){
            e.printStackTrace();
        }


    }
...