Klassen Zeit aus NMEA-Stream in SimpleDateFormat

d9

Mitglied
ich hätte da noch eine frage und zwar habe ich standardmäßig die GMT-Zeit in die Datenbank gespeichert:

Java:
private final DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
GregorianCalendar greg = new GregorianCalendar();
                        TimeZone tz = greg.getTimeZone();
                        int offset = tz.getOffset(System.currentTimeMillis());
                        greg.add(Calendar.SECOND, (offset/1000) * -1);;
                        StringBuffer queryBuf = new StringBuffer();
                        queryBuf.append("INSERT INTO "+POINTS_TABLE_NAME+
                                " (GMTTIMESTAMP,LATITUDE,LONGITUDE,ALTITUDE,ACCURACY,SPEED,BEARING) VALUES (" +
                                "'"+timestampFormat.format(greg.getTime())+"',"+
                                loc.getLatitude()+","+...
jetzt möchte ich aber die GPS-Zeit in die Datenbank hineinspeichern, die aus dem NMEA Stream herausgelesen wird:

Java:
public void onNmeaReceived(long timestamp, String nmea) {
                
                if (!nmea.startsWith(NMEA_RMC))
                      return ;
                  // extract time, date
                  String[] tokens = nmea.split(",");
                  String utcTime = tokens[1];
                  String utcDate = tokens[9];
        
                  // parse
                  DateFormat df = new SimpleDateFormat("HHmmss.S ddMMyy Z");
                  String GPSTime = utcTime + " " + utcDate + " +0000";

wie bringe ich die GPSTime, die nur aus 2 Strings besteht, in das SimpleDateFormat "timestampFormat" (damit auch beim SELECT ein ORDER BY GMTTIMESTAMP ASC möglich ist)?
 
S

SlaterB

Gast
> GPSTime, die nur aus 2 Strings besteht
??

jeder Zeitwert wird irgendwie vorliegen, Date, String, oder sonst ein Format,
das musst du jetzt klären, Beispiel wäre auch nützlich

dem Code und ungenauen Erklärungen ( ;) ) nach sieht es nach einem String aus,
den könntest du mit einem passenden SimpleDateFormat in ein Date-Objekt parsen, damit auch Calendar, falls nötig,
und dann eben mit dem anderen Format wieder in einen String

überlege auch, ob du PreparedStatement nutzen kannst und willst, dann kannst du das Date-Objekt an sich übergeben
 

d9

Mitglied
der NMEA-Stream vom GPS-Empfänger sieht z.B folgendermaßen aus:

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

(Quelle: NMEA data)

daraus ziehe ich aus dem 1. Token die Zeit (in diesem Fall 123519) und aus dem 9. Token das Datum (230394), anschließend speichere ich diese beiden als Strings ab.

und jetzt müsste ich diese beiden Strings irgendwie in ein Format bekommen, ähnlich wie bei
timestampFormat.format(greg.getTime()) , sodass ich diesen Wert in die Spalte GMTTIMESTAMP speichern und anschließend ein "SELECT * FROM POINTS_TABLE_NAME ORDER BY GMTTIMESTAMP ASC" durchführen kann
 

d9

Mitglied
Bsp.

greg.getTime() liefert mir "Tue Feb 07 10:10:00 GMT 2012"

durch das timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss") wird mir bei timestampFormat.format(greg.getTime()) der Wert "20120207101000" gespeichert. und genau in diesem Format möchte ich auch meine 2 vereinten Strings
 
S

SlaterB

Gast
die letzten 3 Zeilen (edit: im Posting von 10:57) sind Wiederholung, nebenbei,

"123519 230394" also, interessantes Datum, also ich weiß nicht was das für ein Datum ist,
aber noch eben schnell nachgeschlagen in deinem Link, was du dir zu zitieren erspart hast (jetzt höre ich aber auf zu meckern ;) ) :
Where:
RMC Recommended Minimum sentence C
123519 Fix taken at 12:35:19 UTC
[..]
230394 Date - 23rd of March 1994

puh, das sind dann ja doch normale Werte,
du hast ja auch schon selber ein DateFormat gepostet
Java:
 DateFormat df = new SimpleDateFormat("HHmmss.S ddMMyy Z");
gibt es damit Probleme?
wie gesagt: den String GPSTime kannst du mit dem SimpleDateFormat in ein Date parsen und dann mit einem anderen SimpleDateFormat in ein anderes String-Format formatieren

was genau ist daran problematisch oder noch unverständlich?
 
Zuletzt bearbeitet von einem Moderator:

d9

Mitglied
also das Datum war aber meiner Meinung nach schon leicht verständlich :D

ja mit dem definierten DateFormat bekam ich immer einen SQL-Error, da der Wert anscheinend nicht sortierbar (ASC) ist, deshalb dachte ich mir ich muss doch irgendwie den Wert "123519 230394" in die Datenbank speichern können, sodass ich ein "SELECT * FROM POINTS_TABLE_NAME ORDER BY GMTTIMESTAMP ASC" ausführen kann und mir alle jüngsten Einträge ganz oben stehen
 
S

SlaterB

Gast
ich verstehe deine Rückfrage nicht oder was immer du postest,
meine Aussage ist, dass du mit den beiden SimpleDateFormats den String "123519 230394 +0000" in "19940323123519"
umwandeln kannst, denn das habe ich als dein Ziel verstanden,

geht das bei dir, ja oder nein, hast du Fragen dazu?
bitte nur auf die beiden Strings konzentrieren und in Folgepostings nicht mehr Buchstabenkombinationen wie "DB", "ASC", "SQL" usw. erwähnen
 

d9

Mitglied
> meine Aussage ist, dass du mit den beiden SimpleDateFormats den String "123519 230394 +0000" in >"19940323123519" umwandeln kannst, denn das habe ich als dein Ziel verstanden,

genau das will ich ja genau
 
S

SlaterB

Gast
Zusammenfassung:
in drei Postings von mir steht
den könntest du mit einem passenden SimpleDateFormat in ein Date-Objekt parsen, damit auch Calendar, falls nötig,
und dann eben mit dem anderen Format wieder in einen String
+
wie gesagt: den String GPSTime kannst du mit dem SimpleDateFormat in ein Date parsen und dann mit einem anderen SimpleDateFormat in ein anderes String-Format formatieren

was genau ist daran problematisch oder noch unverständlich?
+
geht das bei dir, ja oder nein, hast du Fragen dazu?

-------

und dein kompletter Beitrag dazu ist
genau das will ich ja genau
unter Ignorierung sämtlicher Vorschläge/ inhaltlichen Nachfragen (die quasi-Nachfrage zum Ziel hast du ja beantwortet)

was soll ich jetzt noch posten außer der Komplettlösung, auch wenn es nur zwei, evtl. eine Code-Zeile ist? ???:L
 

d9

Mitglied
> was soll ich jetzt noch posten außer der Komplettlösung, auch wenn es nur zwei, evtl. eine Code-Zeile ist?

Die Nachfrage zum Ziel habe ich nicht beantwortet, genau vor diesem Problem stehe ich ja.

Und wenn du Vorschläge gibst wie "mit einem passenden SimpleDateFormat in ein Date-Objekt parsen, damit auch Calendar, falls nötig" oder "SimpleDateFormat in ein Date parsen und dann mit einem anderen SimpleDateFormat in ein anderes String-Format formatieren" dann hilft mir das auch nicht weiter, denn genau aus diesem Grund bzw. weil ich vor diesem Problem stehe habe ich das Forum benützt!
 
S

SlaterB

Gast
> dann hilft mir das auch nicht weiter
das schreibst du zum ersten Mal, bisher habe ich von dir keine Rückmeldung zu meinem Vorschlag bekommen

natürlich ist das auch nicht gerade ausführlich,
aber gut, wenn du schon soviele Postings schreiben musst, dann hast du zumindest Zeit investiert,
und damit ich nicht nur nerve, hier bisschen Code:

Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        String a = "09";
        SimpleDateFormat df1 = new SimpleDateFormat("yy");
        SimpleDateFormat df2 = new SimpleDateFormat("yyyy");
        Date date = df1.parse(a);
        String b = df2.format(date);
        System.out.println(b); // Ausgabe 2009, einen String in ein anderes Format formatiert
    }
}
siehst du nun was ich meine, kannst du irgendwas dazu sagen?
 

d9

Mitglied
aber ehrlich, ich poste doch etwas in einem Forum um Lösungsvorschläge zu bekommen und keine Schritte, wie ich zur Lösung komme, oder? :p

ok dein Beispiel verstehe ich jetzt, d.h. es müsste dann bei

Java:
DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
DateFormat df = new SimpleDateFormat("HHmmss.S ddMMyy Z");

String dateStr = "123519" + " " + "230394" + " +0000";

try {
	Date date1 =df.parse(dateStr);
	String GPSTime = timestampFormat .format(date1);		    	  		
} catch (ParseException e) {
	return;
}

für den String GPSTime mein gewünschter Wert "19940323123519" herauskommen?
 

Andi_CH

Top Contributor
Ich habe die Diskussion kopfschüttelnd gelesen - entweder ich habe etwas verpasst, oder es gibt hier einige Missverständnisse:

Ja ich habe auch schon NMEA ausgewertet, allerdings war damals das Datum und die Zeit unwichtig.

... den String "123519 230394 +0000" in "19940323123519" umwandeln ...

Das braucht doch keinen Calendar kein Date gar nichts - das sind reine Stringoprationen

Wenn es im NMEA echt keine Information zum Jahrtausend hat, muss man halt "Vermutungen" anstellen, wenn man archivierte Daten verarbeiten will.

Im Livebetrieb: Konstant "20" und dann immer brav die entsprechenden Digits anhängen ...

Wenn die Übertragung vom GPS fehlerbehaftet sein sollte (war sie zwar bei mir damals nicht) könnte man die schon erwähnten Mechanismen zur Prüfung des Resultates einsetzen.
 
S

SlaterB

Gast
@d9
also was immer du im Forum machst, ich wiederum kopiere nicht deinen Code, lasse ihn bei mir laufen und sage dann ob er funktioniert ;)
(edit: also ich kopiere vielleicht schon, aber sage dann nichts)

Tipp: Exceptions ausgeben
 
Zuletzt bearbeitet von einem Moderator:

d9

Mitglied
@andi_ch
ich habe keinen blassen schimmer was du meinst sry...btw, das Datum war nur frei gewählt falls du das meintest...

@SlaterB

ist mir schon klar dass du das nicht selbst probieren wirst, aber laut der Logik aus deinem vorigen Post müsste das normal klappen oder??
Exception ist übrigens:

02-07 11:48:38.876: E/GPSLoggerService(23212): java.text.ParseException: Unparseable date: 123519 230394 +0000
 
S

SlaterB

Gast
Andi_CH meint dass man alle Zeichen, alle Ziffern nur hin und her sortieren muss, bei 94 vielleicht noch 19 davor ergänzen usw.,
ist eine Variante

> laut der Logik aus deinem vorigen Post müsste das normal klappen oder??
es ist dieselbe Logik angewandt, ja

wenn Fehler mit drin sind muss es dadurch natürlich nicht direkt klappen,

falls ich mir wieder ein Anleitung statt direkte Lösung (ohne Arbeit/ Denkprozess bei dir) erlauben darf:
fange so einfach an wie ich, erstmal nur das Jahr mit yy, danach die Monate ergänzen usw.,
den String erweitern + gleichzeitig das Format, an welcher Stelle kracht es?
 
Zuletzt bearbeitet von einem Moderator:

d9

Mitglied
ok so funktioniert es jetzt! anscheinend waren die Leerzeichen im SimpleDateFormat zu viel...
Java:
DateFormat timedatef=new SimpleDateFormat("ddMMyyHHmmss");
DateFormat test=new SimpleDateFormat("yyyyMMddHHmmss");

String dateStr = "230394";
String timeStr = "123519";

String dateandtime = dateStr+timeStr;

Date timeanddate = timedatef.parse(dateandtime);

GPSTime = test.format(timeanddate);


Danke nochmals! :)
 

Andi_CH

Top Contributor
Nur noch etwas hinten nach - ich bemerke halt eben oft so genannten overkill und den "bekämpfe" ich gerne. Gerade weil ich auch immer Mühe mit den Format-Pattern habe, habe ich eine gewisse Kreativität entwickelt ;-)

Java:
public class NMEA {

	private static String dateStr = "230394";
	private static String timeStr = "123519";
	
	private static final int YEAR_OFFSET = 4;
	private static final int MONTH_OFFSET = 2;
	private static final int DAY_OFFSET = 0;

	public static void main(String... args) {
		String resultat = "19";
		resultat += dateStr.substring(YEAR_OFFSET);
		resultat += dateStr.substring(MONTH_OFFSET, YEAR_OFFSET);
		resultat += dateStr.substring(DAY_OFFSET, MONTH_OFFSET);
		resultat += timeStr;
		System.out.println(resultat);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Zeit Optimierung - bzw. ms Optimierung Allgemeine Java-Themen 35
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
K CET-Zeit benutzen Allgemeine Java-Themen 6
K Geschätze Zeit implementieren Allgemeine Java-Themen 14
Blender3D AWT Fehlerhafte Zeit bei Calender und Date DateFormat Allgemeine Java-Themen 8
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
O Java Hardware Software Zeit Allgemeine Java-Themen 7
H Bestimmte Aufgaben zur bestimmter Zeit/ in bestimmten Intervallen Allgemeine Java-Themen 3
F Zeit ermitteln Allgemeine Java-Themen 2
Q Zeit in GUI selbst aktualisieren Allgemeine Java-Themen 5
M AudioClip in Spiel mehrfach in kurzer Zeit abspielen Allgemeine Java-Themen 3
N java.util.Date - Zeit auf 00:00 setzen Allgemeine Java-Themen 3
R Raum und Zeit Allgemeine Java-Themen 11
S Zeit Allgemeine Java-Themen 4
Z zeit zwischen maus drücken und loslassen Allgemeine Java-Themen 7
T Methodenparameter zur Compile-Zeit überprüfen Allgemeine Java-Themen 8
J Lizenz auf Zeit Allgemeine Java-Themen 8
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
prakdi Zeit zum Durchlauf der Schleifen unverständlich!? Allgemeine Java-Themen 3
A JavaVM Zeit Windows 7 Allgemeine Java-Themen 9
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
C Leerzeilen verbrauchen Zeit! Allgemeine Java-Themen 5
J Datum und Zeit Allgemeine Java-Themen 4
data89 Zeit-Diagramm erstellen Allgemeine Java-Themen 11
G JComboBox getSelectedItem Zeit Allgemeine Java-Themen 5
Kr0e Sekunden -> Zeit Allgemeine Java-Themen 14
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
B System CPU Zeit / Last auslesen Allgemeine Java-Themen 2
J zeit überscheidungen ermitteln Allgemeine Java-Themen 6
P Thread Demonstrationr eist durch die Zeit Allgemeine Java-Themen 4
A Compilierdatum/Zeit in Code eingenerieren Allgemeine Java-Themen 13
Kidao Wie ordne ich die aktuelle Zeit in einer Zeitreihe eine? Allgemeine Java-Themen 6
J zeit stoppen Allgemeine Java-Themen 11
M Zeit eines rechners im netzwerk ermitteln Allgemeine Java-Themen 6
B Aktuelle Zeit im Format YYYY-MM-DD HH-MM-SS in Logfile schre Allgemeine Java-Themen 8
C Umrechnung der Zeit Allgemeine Java-Themen 8
B 2 JList instanzen wo nur einer zur selben Zeit selektierbar? Allgemeine Java-Themen 8
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
P Zeit messen Allgemeine Java-Themen 16
M Zeit läuft rückwärts Allgemeine Java-Themen 3
K Thread Safe Zeit Messung Allgemeine Java-Themen 2
D Programmunterbrechung für eine bestimmte Zeit (Millisikunden Allgemeine Java-Themen 10
K ServerSocket benötigt unmengen an Zeit Allgemeine Java-Themen 7
D Zeit messen Allgemeine Java-Themen 2
G try auf zeit Allgemeine Java-Themen 8
R Garbage Collector rennt die ganze Zeit Allgemeine Java-Themen 7
M Fortschritt: verbleibende Zeit errechen. Allgemeine Java-Themen 2
F Zeit errechnen mit GregorianCalendar Allgemeine Java-Themen 8
F vergangene Zeit berechnen Allgemeine Java-Themen 6
A Unix Zeit Allgemeine Java-Themen 2
D Datum und Zeit - Date, Calendar oder GregorianCalender ? Allgemeine Java-Themen 13
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
C Vergangene Zeit seit Anwendungsstart messen Allgemeine Java-Themen 5
T Zeit aufaddieren Allgemeine Java-Themen 3
T zeit in java Allgemeine Java-Themen 4
KonradN SonarLint: Resources should be closed bei Stream<T>? Allgemeine Java-Themen 6
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
looparda Stream mit Sonderbehandlung des ersten Elements Allgemeine Java-Themen 17
R Java Stream: Ist es möglich, einen stream zusammenzufassen Allgemeine Java-Themen 6
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
M stream.Collectors Fehlermeldung Allgemeine Java-Themen 1
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
N Java stream filtern. Allgemeine Java-Themen 19
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
N javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Allgemeine Java-Themen 3
N [stream-api] Parameter pro Typ zählen Allgemeine Java-Themen 1
J Stream-basierter Cache Allgemeine Java-Themen 4
D IP-Cam live stream speichern Allgemeine Java-Themen 9
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
J Stream-Murks! Allgemeine Java-Themen 18
T Problem mit gzip Stream und Ende der Datei Allgemeine Java-Themen 2
JAVATUX Java Programm mit ATI Stream Unterstützung Allgemeine Java-Themen 3
X Audio Internet-Stream Allgemeine Java-Themen 2
B Stream Verständnisproblem Allgemeine Java-Themen 2
P Mime Type aus Stream lesen Allgemeine Java-Themen 5
C Bit Stream Klasse Allgemeine Java-Themen 9
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
M PCL Stream lesen und schreiben Allgemeine Java-Themen 6
musiKk Stream zum Lesen von Dateien mit seek und peek Allgemeine Java-Themen 2
J Problem mit Scanner-Stream Allgemeine Java-Themen 2
O Stream unvollständig Allgemeine Java-Themen 3
0 Stream/Datei an VLC übergeben und abspielen Allgemeine Java-Themen 10
B getImage() vom Stream oder File Allgemeine Java-Themen 3
N Werte Von C++ nach Java über den Stream möglich? Allgemeine Java-Themen 8
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S Stream ohne Referenz kopieren ? Allgemeine Java-Themen 4
D FileInputStream bzw. BufferedInput Stream Puffern Allgemeine Java-Themen 6
G Live-Stream einer WebCam importieren Allgemeine Java-Themen 3
T Mehrere Dateien byteweise durch stream schieben Allgemeine Java-Themen 9
T Stream encodierrn und decodieren mit JSpeex Allgemeine Java-Themen 2
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
O Input stream geht net Allgemeine Java-Themen 2
N Speichern von binären Dateien (Zip-Archiv) per Stream? Allgemeine Java-Themen 6
T Bit-Stream Allgemeine Java-Themen 12
R Stream für alle Dateiarten Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben