Как сравнить две даты в Java? - PullRequest
0 голосов
/ 13 октября 2011

Передаю мой салют каждому трудолюбивому разработчику,

и приветствую каждого борца там.

На самом деле я здесь, потому что застрял на очень простой проблеме.

Я создаю клиент-серверное приложение, и меня смущает сравнение двух дат, извлеченных из jtable (в конце концов, я вообще никогда не сталкивался с какими-либо операциями над датами).Мы использовали этот код:

public static final String DATE_FORMAT_NOW = "yyyy-MM-dd";

  public static String now() {
   Calendar cal = Calendar.getInstance();
   SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
   return sdf.format(cal.getTime());

   }

 public static void ColorTheCell2(JTable jTable2){
          jTable2.getColumn("Date d'expiration").setCellRenderer(
    new DefaultTableCellRenderer() {

        @Override
    public Component getTableCellRendererComponent
    (JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){

    Calendar datetable=Calendar.getInstance();

    String date=value.toString();
    String day=""+date.substring(8).toString();
    String month=""+date.substring(5, 7).toString();
    String year=""+date.substring(0,4).toString();

   datetable.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
    Calendar curdate=Calendar.getInstance();

     String date1=now();
     String day1=""+date1.substring(8).toString();
     String month1=""+date1.substring(5, 7).toString();
     String year1=""+date1.substring(0,4).toString();
                curdate.set(Integer.parseInt(year1),Integer.parseInt(month1)+1,Integer.parseInt(day1));


            if(datetable.before(curdate)){

                setText(value.toString());
                setBackground(Color.red);
            }
            else{
                 setText(value.toString());
            }

return this;
 }
  });
    }

Спасибо за ваше время.С наилучшими пожеланиями

Ответы [ 4 ]

6 голосов
/ 13 октября 2011

Вы не говорите, какой тип значения в ячейке. Если это строка, то вы делаете это неправильно: это должна быть дата, и средство визуализации должно использовать DateFormat для отображения даты (в дополнение к установке соответствующего фона. Это, например, позволит сортировать таблица хронологически, а не лексикографически.

Если это уже дата, просто сравните ее с текущей датой, используя метод CompareTo.

Ваш метод now () действительно странный, так как кажется, что он возвращает String, а не Date. Подходящим типом для представления даты является Дата, а не Строка. Используйте Date и форматируйте его, используя DateFormat каждый раз, когда вам нужно это как String. Не делайте наоборот (используя строку и анализируя ее - вручную - каждый раз, когда вам нужна дата).

4 голосов
/ 13 октября 2011

Если в Object value значение имеет тип Date, тогда приведите его к Date -

Date valDate = (Date) value;

Или, если это String, то проанализировать Date из него -

Date valDate = new SimpleDateFormat("pattern in value").parse((String) value);

Получить текущую дату -

Date currDate = new Date();

И тогда вы можете использовать любой из следующих методов в Date class -

  1. boolean after(Date when)
  2. boolean before(Date when)
  3. int compareTo(Date anotherDate)

например.

if(valDate.before(currDate)) {

    //...

API документ: Дата , SimpleDateFormat

4 голосов
/ 13 октября 2011

Взгляните на compareTo() в классе Календаря

В общем, я предпочитаю использовать Joda Time API для дат и связанных со временем вещей в Java.

3 голосов
/ 13 октября 2011

Date реализует интерфейс Comparable, поэтому вы можете использовать метод compareTo () для сравнения двух дат. То же самое для Calendar, просто используйте compareTo () метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...