Date: Ohne Tag und aktuelle Uhrzeit

Vatar

Erfahrenes Mitglied
Hallo

Ich habe gerade das Problem dass bei einem Datum überprüfe ob es zwischen zwei anderen Daten liegt (also Start- und Enddatum). Dafür benötige ich nur den Monat (inkl. Jahr).

Meine GUI nutzt das CDateTime widget und bei der initialisierung wird automatisch das aktuelle Datum genommen, also mit einem Format ("MMMM yyyy") steht da August 2007. Dummerweise hat das Objekt welches vergliches werden soll aber z.B. den 14.8.2007, die anderen Daten aus CDateTime aber den 27.8.2007. Mein Programm soll aber nur den Monat berücksichtigen, also wäre diese Konstellation korrekt, mit
Java:
private boolean isDateBetweenDates(Date object, Date start, Date end){
	if(object.after(start) && object.before(end))
		return true;
	else
		return false;
}
funktioniert das aber nicht.

Wie könnte ich vorgehen um das Datum flexibler zu behandeln?

Danke

P.S. Ich nutze Hibernate und mappe das Date auf einen Timestamp. Wäre es möglich/sinnvoll gleich auf einen (Gregorian)Calendar zu mappen?
 
Wie wärs damit:

Code:
private boolean isDateBetweenDates(Date object, Date start, Date end){

		 int objMonth =object.getMonth();
		 int startMonth=start.getMonth();
		 int endMonth = end.getMonth(); 

		 if(objMonth>=startMonth && objMonth<=endMonth)
			 return true;
		 else
			 return false;
	 
}

Hoffe ich habe dein Anliegen richtig verstanden.
 
Danke, daran dachte ich auch schon, aber was ist wenn ich Monate aus zwei verschiedenen Jahren auswähle. Dann haut das so ja auch nicht mehr hin
 
Warum schwer wenns auch einfach geht. Danke.

Allerdings habe ich die Dates erst in GregorianCalendar umgewandelt da die get-Methoden von Date deprecated sind. Die POJOs von Hibernate auf GregorianCalendar zu ändern war mir dann allerdings zu viel Aufwand.
 
Hallo,

Schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

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

/**
 * @author Thomas.Darimont
 * 
 */
public class DateCheckExample {

    /**
     * @author Thomas.Darimont
     * 
     */
    public static class DateTimeInterval {
        Date startDate;
        Date endDate;

        /**
         * @param startDate
         * @param endDate
         */
        public DateTimeInterval(Date startDate, Date endDate) {
            super();
            GregorianCalendar gregorianCalendar = new GregorianCalendar();
            gregorianCalendar.setTime(startDate);
            gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);
            gregorianCalendar.set(Calendar.HOUR_OF_DAY, 0);
            gregorianCalendar.set(Calendar.MINUTE, 0);
            gregorianCalendar.set(Calendar.SECOND, 0);
            gregorianCalendar.set(Calendar.MILLISECOND, 0);
            this.startDate = gregorianCalendar.getTime();

            gregorianCalendar.setTime(endDate);
            gregorianCalendar.set(Calendar.DAY_OF_MONTH, gregorianCalendar
                    .getActualMaximum(Calendar.DAY_OF_MONTH));
            gregorianCalendar.set(Calendar.HOUR_OF_DAY, 23);
            gregorianCalendar.set(Calendar.MINUTE, 59);
            gregorianCalendar.set(Calendar.SECOND, 59);
            gregorianCalendar.set(Calendar.MILLISECOND, 999);
            this.endDate = gregorianCalendar.getTime();
        }

        public boolean contains(Date date) {
            return this.startDate.before(date) && this.endDate.after(date);
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
        Date startDate = simpleDateFormat.parse("01.08.2007");
        Date endDate = simpleDateFormat.parse("31.09.2007");

        System.out.println(new DateTimeInterval(startDate, endDate)
                .contains(date));
    }

}

Gruß Tom
 
Zurück