Datum Differenz berechnen

frst

Mitglied
Hallo liebes Forum,

ich lese schon einige Zeit mit um meine Java Kenntnisse aufzufrischen und zu erweitern. Ich scheitere momentan an einem Teil meines Projekts. Ich habe zwei JDateChooser aus dem jCalander1.4 in meiner grafischen Oberfläche. Dort kann ich zwei verschiedene Daten auswählen. Dieses Datum kann ich auch in einem Textfeld im Format "locale.Germany" also dd.MM.yy ausgeben. Nun möchte ich einen Schritt weiter gehen und die Differenz zwischen zwei Daten in Tagen berechnen lassen. So das ich später einmal einen "Ausleihpreis" berechnen lassen kann.

Nun seit einigen Stunden befasse ich mich mit dem Thema und komme einfach nicht auf die richtige Spur... Vielleicht kann mir der ein oder andere einen guten Tipp geben. ;(

Hier der wichtigste Ausschnitt!

Java:
public class NotebookForm extends javax.swing.JFrame {

  
   DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY);
 
  
    public NotebookForm() {
        initComponents();
    }
    
    
    @SuppressWarnings("unchecked")
    
    }                                                 

    private void btn_TageBerechnenActionPerformed(java.awt.event.ActionEvent evt) {                                                  
      //JOptionPane.showMessageDialog(rootPane, jDateChooser1);
      String strvonDatum = df.format(vonDatumChooser.getDate());
      String strbisDatum = df.format(bisDatumChooser.getDate());  
      
      txtDatumDifferenz.setText(strvonDatum);
     
        
        
        
        
    }

Ich wäre echt dankbar... Einige Lösungen habe ich mit .getTime() gefunden - jedoch wird diese Methode nicht erkannt. Gibt es diese nicht bei DatumChooser?

Sorry - bin irgendwie ein richtiger Newbie ;-)

Vielen Dank!

frst
 
Zuletzt bearbeitet:
Wo sind deine Versuche? Ich sehe nur Code der die 2 Daten in einen String parsed/formatiert.
Nirgends eine Zeile Code die etwas berechnet.

Mit
Code:
getDate()
bekommst du das Datum als Objekt (von java.util.Date) zurück. Mit diesen Objekt kannst du weiterarbeiten und rechnen!
 
Genau da liegt mein Problem. Ich bekomme ein String zurück mit dem lässt sich ja nicht rechnen. Nun habe ich einiges über GregorianCalander gelesen - blicke aber noch nicht so richtig durch. Kann ich den String in Greogian Calander so umformen? hierbei bekomme ich immer den Fehler "unreported exception ParseException; must be caught or declared to be thrown"

Java:
  GregorianCalendar cal1 = new GregorianCalendar();
    GregorianCalendar cal2 = new GregorianCalendar();
    String strvonDatum = df.format(vonDatumChooser.getDate());
    cal1.setTime(df.parse(strvonDatum));
      
      String strbisDatum = df.format(bisDatumChooser.getDate());  
      
      txtDatumDifferenz.setText(strvonDatum)

Nun versuche ich mal was mit getDate() zu erreichen 🙂
 
Zuletzt bearbeitet:
Ich habe mich mal weiter versucht - leider endet es im Fehler...

Java:
public class NotebookForm extends javax.swing.JFrame {
// DateFormat df = new SimpleDateFormat("dd.MM.yyy");
  
   DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMANY);

  
    public NotebookForm() {
        initComponents();
    }
    
    
                 

                                               
        // TODO add your handling code here:
    }                                                 

    private void btn_TageBerechnenActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    //JOptionPane.showMessageDialog(rootPane, jDateChooser1);
    String strvonDatum = df.format(vonDatumChooser.getDate());
    String strbisDatum = df.format(bisDatumChooser.getDate()); 
    
    Date d1 = null;
    Date d2 = null; 
    
    try{
        d1 = format.parse(strvonDatum);
        d2 = format.parse(strbisDatum);
        
        long diff =d2.getTime() - d1.getTime();
        
        long diffTage = diff / (24 * 60 * 60 * 1000);
        
        String s = String.valueOf(diffTage);
    } catch (Exception e)
    {
	e.printStackTrace();
		}
    txtDatumDifferenz.setText(s);
 
Zuletzt bearbeitet:
Wie gesagt
Code:
JDateChooser.getDate()
gibt dir einen Objekt zurück mit welchen du weiterarbeiten kannst!

Dein
Code:
df.format(....)
kannst du vorerst weglassen, da erzeugt aus diesem Objekt nur einen schön formatierten String. Dieser hilft dir nicht beim Rechnen

Java:
public class NotebookForm extends javax.swing.JFrame {
...... 
    //JOptionPane.showMessageDialog(rootPane, jDateChooser1);
    String strvonDatum = df.format(vonDatumChooser.getDate());
    String strbisDatum = df.format(bisDatumChooser.getDate()); 
    
    Date d1 = null;
    Date d2 = null; 
    
    try{
        d1 = format.parse(strvonDatum);
        d2 = format.parse(strbisDatum);
   .......

1.) man leitet nicht von JFrame ab wenn man diese Klasse nicht erweitern willst

2.) getDate() gibt dir schon eine Objekt vom Type Date zurück, dieses wandelst du in einen String um und diesen willst du dann wieder in ein Date-Objekt umwandeln. Warum???
 
Zuletzt bearbeitet:
Okay - klingt irgendwie logisch - verdammt stehe ich mittlerweile auf dem schlauch 🙂

Das hier scheint mir nun auch etwas logischer zu sein - leider meckert er nun
Code:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
	at NotebookForm.btn_TageBerechnenActionPerformed(NotebookForm.java:155)
	at NotebookForm.access$100(NotebookForm.java:23)
	at NotebookForm$2.actionPerformed(NotebookForm.java:67)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Java:
Date d1 = vonDatumChooser.getDate();
    Date d2 = vonDatumChooser.getDate();
    
    
    try{
        
        
        long diff =d2.getTime() - d1.getTime();
        
        long diffTage = diff / (24 * 60 * 60 * 1000);
        
        String s = String.valueOf(diffTage);
    } catch (Exception e)
    {
	e.printStackTrace();
		}
    txtDatumDifferenz.setText(s);

Hab ich was übersehen?
 
Zuletzt bearbeitet:
Java:
Date d1 = vonDatumChooser.getDate();
    Date d2 = vonDatumChooser.getDate();    
    try{
        long diff =d2.getTime() - d1.getTime();
        long diffTage = diff / (24 * 60 * 60 * 1000);
        String s = String.valueOf(diffTage);
    } catch (Exception e)
    {
	e.printStackTrace();
		}
    txtDatumDifferenz.setText(s);
Hab ich was übersehen?

Du definierst den String s im try/catch-Block ... sprich innerhalb diese Block kannst du damit arbeiten, außerhalb ist er unbekannt! Daher kannst du den String auch nicht auf das Textfeld setzen.
==> Definiere den String außerhalb des Block!

[TIPP]
Wenn du Code postet, dann entferne unnötige Leerzeilen. Dadurch wird der Post und Code nur unnötig lang
[/TIPP]
 
Vielen vielen Dank! Jetzt tuts... 🙂
(wo kann ich dir danken?)

:toll::toll::toll::toll:
 
Zuletzt bearbeitet:

Zurück
Oben