Zeitfunktion, die die Sekunden berechnet?

Status
Nicht offen für weitere Antworten.

Zeimen

Mitglied
Hallo,
habe mich soebend hier registriert und bin gerade dabei eine kleine Übungsaufgabe in Java zu programmieren.

Deshalb meine Frage:

Ich gebe zum Beispiel in einem Textfield: 12:34:24 ein.
Wie kann ich diesen String in ein Zeitformat umwandeln. Ich weiss, da gibt es hier schon ein Thread drüber.

Aber ich hab noch ne weitere Frage: Gibt es irgendeine Zeitmethode in Java, die automatisch aus diesem Zeitformat die Sekunden berechnet? Kann man zwar auch leicht selber programmieren, aber meine Aufgabe ist es, zu recherchieren, ob es nicht eine Funktion gibt, die das für mich erledigen könnte.

Danke schon mal für eure Hilfe!!

Gruß,

Zeimen
 

Zeimen

Mitglied
Selbst geschrieben habe ich es schon. Aber meine Aufgabe ist es herauszufinden, ob es da schon eine Methode gibt.

Im Grunde genommen muss ich 2 Zeiten miteinander vergleichen.
z.B:
Zeit 1: 15:34:23
Zeit 2: 15:37:29

Aus diesen beiden Zeiten muss ich sofort die Differenz in Sekunden ausgegeben bekommen.

Geht es evtl. mit der Methode:

computeTime()
Converts calendar field values to the time value (millisecond offset from the Epoch).

Wird doch in Millisekunden konvertiert, oder? dann kann ich halt mit Millisekunden rechnen.
Das blöde ist, dass es von der Grundzeit an errechnet wird. Das verfälscht das Ergebnis.(durch die Programmlaufzeit)

Ich weiß jedoch nicht, wie ich diese Methode einbinden soll, da ich mich mit Calendar field values noch nicht auskenne. Naja, werde mal ein bisschen weiter schaun.

Gruß,

Zeimen
 

mikachu

Top Contributor
Code:
   public static int calcSeconds( String time1, String time2 ) // hh:mm:ss
   {
      int h1, h2, m1, m2, s1, s2;
      String[] parts1 = time1.split( ":" ), parts2 = time2.split( ":" );
      h1 = Integer.parseInt( parts1[0] );
      h2 = Integer.parseInt( parts2[0] );
      m1 = Integer.parseInt( parts1[1] );
      m2 = Integer.parseInt( parts2[1] );
      s1 = Integer.parseInt( parts1[2] );
      s2 = Integer.parseInt( parts2[2] );

      int sec1 = h1 * 3600 + m1 * 60 + s1;
      int sec2 = h2 * 3600 + m2 * 60 + s2;

      return sec1 > sec2 ? sec1 - sec2 : sec2 - sec1;
   }

:oops: aufgabenstellung nicht gelesen :oops: :oops:

#untested#
 

The_S

Top Contributor
Was spricht gegen

Code:
GregorianCalendar cal1 = new GregorianCalendar();
cal1.set(Calendar.HOUR_OF_DAY, hour);
cal1.set(Calendar.MINUTE, min);
cal1.set(Calendar.SECOND, sec);
GregorianCalendar cal2 = new GregorianCalendar();
cal2.set(Calendar.HOUR_OF_DAY, hour2);
cal2.set(Calendar.MINUTE, min2);
cal2.set(Calendar.SECOND, sec2);
System.out.println("Dif: " + ((cal1.getTimeInMillis() - cal2.getTimeInMillis()) / 1000));

?
 

Zeimen

Mitglied
Das sieht schon mal sehr gut aus :D .

Bekomme aber leider eine Fehlermeldung.
Das java.util.*; habe ich auch schon importiert.
Auch wenn ich für hour eine beliebige Zahl angebe funktioniert es nicht.
Woran kann es liegen?

Fehlermeldung:

Fenster.java:21:9: <identifier> expected
cal1.set(Calendar.HOUR_OF_DAY, hour);
^
Fenster.java:21:30: <identifier> expected
cal1.set(Calendar.HOUR_OF_DAY, hour);
^
Fenster.java:21:36: <identifier> expected
cal1.set(Calendar.HOUR_OF_DAY, hour);
^
3 errors
 

mikachu

Top Contributor
klappt bei mir alles

#edit1
code kopieren -> einfügen -> java.util.Calendar und java.util.GregorianCalendar importieren -> ausführen -> klappt
 

Zeimen

Mitglied
Ui...das ging ja schnell. Wollte gerade schreiben, dass ich es schond das Problem gelöst habe.
Habs ausversehen in die falsche Klasse geschrieben. :oops:
 

Zeimen

Mitglied
danke erstmal für eure bisherigen Antworten.

Gibt es eine Möglichkeit wenn ich 2 Strings in einem hh:mm:ss Format wie z.B. 18:34:54 und 18:37:32 habe, diese in ein Zeit-Objekt zu konvertieren, sodass ich die Zeitdifferenz in Sekunden oder Millisekunden vergleichen kann.
Gibt es denn dabei eine kürzere und einfachere Methode dieses zu machen als der GregorianCalendar?
Also direkt konvertieren und dann vergleichen?
 

Zeimen

Mitglied
Habe das erstmal so geschrieben. Weiss nicht, ob es funktioniert. Bekomme immer einen Laufzeitfehler. :(

Code:
for (int x = 1; x <=5; x++)
 {
 try
 {
  s = f[x].getText();
  date = datumsFormat.parse(s);
  cal[x].setTime(date);

  s = f[x].getText();
  date = datumsFormat.parse(s);
  cal[x+1].setTime(date);
  System.out.println("Dif: " + ((cal[x+1].getTimeInMillis() - cal[x].getTimeInMillis()) / 1000));
  differenz = cal[x+1].getTimeInMillis() - cal[x].getTimeInMillis();
  if(differenz < 300 && differenz < 0)
  {
    gdifferenz = differenz + gdifferenz;
  }

 }
 catch ( ParseException p )
 {
    p.printStackTrace();
 }

Ist natürlich nicht der ganze Quellcode.
Ich bekomme immer die Fehlermeldung Exception in thread "main" java.lang.NullPointerException.

Das liegt am objekt-array: TextField[] f = new TextField[5];

Es wird ja bei so einem Array immer mit dem Null-Wert initialisiert und der Konstruktor wird nicht ausgerufen.
Deshalb denke ich kommt diese Fehlermeldung zu stande.
Gibt es denn noch eine andere Möglichkeit ein Objekt-Array vom Textfield zu erstellen? :?:
Ich weiß auch nicht, ob das beim GregorianCalendar auch der Fall ist. :bahnhof:


Gruß,

Zeimen
 

mikachu

Top Contributor
poste mal plz den ganzen fehlerstack.

mit TextField[] f = new TextField[5]; wird ja nur platz für 5 JTextField-instanzen reserviert.
danach noch
Code:
for( int i = 0; i < 5; ++i )
    f[i] = new JTextField();
aufrufen, und die NPE würde meines erachtens wegfallen
und beim GregCal genauso ;)
 

Zeimen

Mitglied
Hier ist mein ganzer Quellcode:

Code:
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.text.*;


public class Daten extends Frame implements ActionListener //, WindowListener
{
 TextField[] f = new TextField[5];
 Button b1 = new Button("Berechnen");

 public Daten()
 {
   super("Datenbank");
   setLayout(null);
   setSize(250,300);
   setResizable(false);

  f[0].setBounds(100,50,100,20);
  add(f[1]);
  f[1].setBounds(100,100,100,20);
  add(f[2]);
  f[2].setBounds(100,150,100,20);
  add(f[3]);
  f[3].setBounds(100,200,100,20);
  add(f[4]);
  f[4].setBounds(100,250,100,20);
  add(f[4]);
  b1.setBounds(10,250,70,20);
  b1.addActionListener(this);
  add(b1);
  setVisible(true);
 }
 
 public void paint(Graphics g)
 {
   g.drawString("Zeit1",50,65);
   g.drawString("Zeit2",50,115);
   g.drawString("Zeit3",50,165);
   g.drawString("Zeit4",50,215);

 }
 public static void main(String[] args)
 {
  Daten d = new Daten();
 }
 
 public void actionPerformed(ActionEvent e)
 {

  String s = new String();
 Date date = new Date();
 SimpleDateFormat datumsFormat = new SimpleDateFormat ("HH:mm:ss");
 GregorianCalendar[] cal = new GregorianCalendar[5];
 long differenz = 0;
 long gdifferenz = 0;
 
 for (int x = 1; x <=5; x++)
 {
 try
 {
  s = f[x].getText();
  date = datumsFormat.parse(s);
  cal[x].setTime(date);


  s = f[x].getText();
  date = datumsFormat.parse(s);
  cal[x+1].setTime(date);
  //long s = cal2.getTimeInMillis()- cal1.getTimeInMillis();
  System.out.println("Dif: " + ((cal[x+1].getTimeInMillis() - cal[x].getTimeInMillis()) / 1000));
  differenz = cal[x+1].getTimeInMillis() - cal[x].getTimeInMillis();
  if(differenz < 300 && differenz < 0)
  {
    gdifferenz = differenz + gdifferenz;
  }
 }
 catch ( ParseException p )
 {
    p.printStackTrace();
 }
 }
 
 f[4].setText(" " +differenz);
}

}

Die Zeilennummerierung passt:
Der Fehlerstack beim Starten des Programmes ist:

Exception in thread "main" java.lang.NullPointerException
at Daten.<init>(Daten.java:19)
at Daten.main(Daten.java:45)



Wenn ich es so programmiere:

Code:
TextField[] f = new TextField[5];
 f[0] = new TextField();

Bekomme ich den Fehler schon beim compilieren:

Daten.java:10:4: ']' expected
f[0] = new TextField();
^
Daten.java:10:13: invalid method declaration; return type required
f[0] = new TextField();
^
2 errors
 

Leroy42

Top Contributor
Du mußt die TextFields im Konstruktor initialiseren:

Code:
Daten() {
  ...
  setResizable(false);
  for (int i=0; i < f.length; i++)
    f[i] = new TextField();
  ...
}
 

mikachu

Top Contributor
Code:
public Daten() 
{ 
   super("Datenbank"); 
   setLayout(null); 
   setSize(250,300); 
   setResizable(false); 

  for( int i = 0; i < 5; ++i )
  {
     f[i] = new TextField();
     f[i].setBounds( 100, 50 * ( i + 1 ), 100, 20 );
     add( f[i] );
  }
  b1.setBounds(10,250,70,20); 
  b1.addActionListener(this); 
  add(b1); 
  setVisible(true); 
}

klappt :!:
 

Leroy42

Top Contributor
mika.fhdw hat gesagt.:
Code:
...
  for( int i = 0; i < 5; ++i )
  ...

klappt :!:

aber ist schlecht.
Statt die Konstante 5 ein zweites Mal zu schreiben, sollte besser
Code:
 for( int i = 0; i < f.length; ++i )
geschrieben werden.
 

mikachu

Top Contributor
@Leroy42 hast ja recht...
weiterhin kann man da auch ne statische finale variable setzen und die ARRAY_LENGTH zum beispiel nennen...
da muss man das niemehr schreiben ;)

...aber ich hab vorausgesetzt, dass das so immer gemacht wird ;)... oder irr ich mich da?
 

mikachu

Top Contributor
jap :D
aber auf statische wird schneller zugegriffen. und wenn die dann noch final sind, gehts noch schneller... hab ich mal irgendwo gelesen :###
 

Zeimen

Mitglied
danke für eure Antworten. habe mir sehr geholfen.
das mit dem Konstruktor habe ich noch nicht gewusst. :bahnhof:

Das Programm läuft soweit. Hab bloss nur noch nen komischen Laufzeitfehler:


Wenn ich in in Zeile 67

s = f[x].getText(); durch s = f[x+1].getText(); ersetze

..das Programm dann laufen lasse. Werte in die Felder eingebe und berechne, bekomme ich diese Fehlermeldung:

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Naja...muss leider noch viel in Java lernen
 

mikachu

Top Contributor
das geht ja schon mit der for-schleife los...

in java fangen alle zählwerte für arrays, listen, etc.. .mit 0 und nicht mit 1 an.
dann gibt es in deinem falle 5 einträge -> 0, 1, 2, 3, 4 und keinen mit index 5!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
H For-Schleife für 60 sekunden laufen lassen Java Basics - Anfänger-Themen 1
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
A Zeitintervall erstellen: z.B. 4000 Sekunden = 01:06:40 Java Basics - Anfänger-Themen 21
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
J Rechenzeit in Sekunden Java Basics - Anfänger-Themen 3
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
B Für gesamte Schleife genau X Sekunden benötigen Java Basics - Anfänger-Themen 1
G Mausclick all 5 Sekunden Java Basics - Anfänger-Themen 4
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
H Erste Schritte Sekunden in Uhrzeit Java Basics - Anfänger-Themen 7
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
E Methode erst nach 20 Sekunden ausführen? Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
J Aufgabe: Zeit in Sekunden Java Basics - Anfänger-Themen 9
G Millisekunden in Minuten und Sekunden umwandeln Java Basics - Anfänger-Themen 12
F Sekunden abschneiden bei Date Java Basics - Anfänger-Themen 4
G Sekunden bis zum Ende der aktuellen Kalenderwoche ermitteln! Java Basics - Anfänger-Themen 3
W OOP Datum aus Access in Textfeld schreiben ohne Stunden/Minuten/Sekunden Java Basics - Anfänger-Themen 2
W Rekursion: Sekunden berechnen Java Basics - Anfänger-Themen 3
H Unterschied zwischen 2 Date in Sekunden am einfachsten? Java Basics - Anfänger-Themen 5
K Nach x Sekunden neuer Text/Zeile Java Basics - Anfänger-Themen 11
C Anzahl der Sekunden aus Uhrzeit extrahieren Java Basics - Anfänger-Themen 6
A Verständnisfrage Sekunden/Tage Umrechnung Java Basics - Anfänger-Themen 3
S Zeitspanne in Sekunden Java Basics - Anfänger-Themen 3
S Zeitspanne in Sekunden Java Basics - Anfänger-Themen 4
S While-Schleife nach 10 sekunden abbrechen. Java Basics - Anfänger-Themen 20
T sekunden zählen Java Basics - Anfänger-Themen 7
K Thread nach X-Sekunden beenden Java Basics - Anfänger-Themen 6
M Sekunden aufteilen Java Basics - Anfänger-Themen 5
G date in sekunden umwandeln und wieder zurück. Java Basics - Anfänger-Themen 6
G Ein Image langsam einblenden und nach 5 Sekunden ausblenden? Java Basics - Anfänger-Themen 10
TRunKX Probleme mit der Zeit (Stunden Sekunden) Java Basics - Anfänger-Themen 7
M Stunden, Minuten, Sekunden als Integer-Variablen, wie? Java Basics - Anfänger-Themen 2
M x Sekunden warten Java Basics - Anfänger-Themen 13
G Datum und Uhrzeit in Sekunden konvertiern Java Basics - Anfänger-Themen 4
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
M Warum berechnet mein Primzahlenprog zu hohe Zahlen nicht? Java Basics - Anfänger-Themen 20
P Input/Output PQ-Formel wird nicht richtig berechnet Java Basics - Anfänger-Themen 6
B Operatoren Java berechnet immer 0? Java Basics - Anfänger-Themen 3
D Prozente werden falsch berechnet Java Basics - Anfänger-Themen 8
D Matritzenmultiplikation berechnet Werte falsch Java Basics - Anfänger-Themen 9
L Methoden Histogramm, Methode berechnet falsch. Java Basics - Anfänger-Themen 7
O Kehrwert wird nicht berechnet? Java Basics - Anfänger-Themen 3
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
A was berechnet diese programm? Java Basics - Anfänger-Themen 13
D Muss ein Applet schreiben was Mittelwerte berechnet nur was mache ich falsch? Java Basics - Anfänger-Themen 11
D Zurück in die Zukunft oder wie man Zeitpunkte berechnet Java Basics - Anfänger-Themen 2
G Berechnet ASCII-Code Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben