WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Sekunden zu datevec hinzuaddieren

 

unibw

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2013, 17:27     Titel: Sekunden zu datevec hinzuaddieren
  Antworten mit Zitat      
Hallo Zusammen,

ich habe folgendes Problem:
Ich habe eine Zeitangabe als datestr gegeben ('01-Mar-2000 15:45:11') und möchte nun eine bestimmte Anzahl an Sekunden jeweils zu diesem Datum hinzuaddieren. Hierfür wandle ich den datestr in einen datevec um - also einen Vektor mit 6 Einträgen - und addiere zu dessen letzten Eintrag die Sekundenzahl hinzu. Dann transformiere ich den resultierenden datevec wieder in einen datestr. Siehe nachfolgendes Beispiel:

Code:

dummy1 = '01-Mar-2000 15:45:11';
dummy2 = datevec(dummy1);
dummy2(6) = dummy2(6) + (121);
datestr(dummy2)
 

Soweit, so gut. Matlab gibt den erwarteten Wert '01-Mar-2000 15:47:12' aus. Allerdings funktioniert das nicht immer. Ich konnte leider nur nachfolgendes Beispiel künstlich erzeugen:

Code:

dummy1 = '01-Mar-2000 15:45:11';
dummy2 = datevec(dummy1);
datestr(dummy2)
dummy2(6) = dummy2(6) + (121);
datestr(dummy2)
dummy2(6) = dummy2(6) + (121);
datestr(dummy2)
dummy2(6) = dummy2(6) + (121);
datestr(dummy2)
dummy2(6) = dummy2(6) + (121);
datestr(dummy2)
 

Führt man diesen Code mittels Matlab aus, so ergibt sich bis auf beim letzten Mal stets die korrekte Ausgabe. Beim letzten Mal allerdings wird nicht ein datestr erzeugt, sondern ein Vektor der Länge sechs, wobei jeder dieser sechs Einträge einen datestr enthält. Ich konnte bei diesem Phänomen bisher leider kein reguläres Verhalten erkennen und hoffe, dass mir jemand weiterhelfen kann. Ich wäre auch zufrieden, wenn ich das Hinzuaddieren von Sekunden anders (aber effizient) hinbekommen könnte.

Viele Grüße,
unibw


unibw

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2013, 17:30     Titel:
  Antworten mit Zitat      
Hier übrigens noch der Vektor, der beim letzten Mal ausgegeben wird:

Code:

22-Jun-0005
03-Jan-0000
01-Jan-0000
15-Jan-0000
14-Feb-0000
09-May-0001
 
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2013, 10:05     Titel:
  Antworten mit Zitat      
Hallo,

ich würde statt datevec das numerische Datumsformat nehmen:
Code:

dummy1 = '01-Mar-2000 15:45:11';
dummy2 = datenum(dummy1)
dummy2 = dummy2 + 1/(24*60*60) % 1 Sekunde dazu
datestr(dummy2)
 


Damit klappt es dann ohne Probleme.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2013, 10:48     Titel: Re: Sekunden zu datevec hinzuaddieren
  Antworten mit Zitat      
Hallo unibw,

Das sieht nach einen Bug aus. Welche Matlab-Version verwendest Du? Ich kann dies erst heute Abend überprüfen, aber es ist schon merkwürdig.
Matlab's Datums-Funktionen sind übrigens ausgesprochen ineffizient, da sie viel "Intelligenz" einsetzen. Deutlich schneller ist es, wenn man das Konvertieren hart kodiert, z.B. http://www.mathworks.com/matlabcent.....xchange/25594-dateconvert und http://www.mathworks.com/matlabcent.....xchange/28093-datestr2num. Weil diese schnellen Funktionen aber nicht mehr "schlau" sind, würden sie an dem Überlauf der Sekunden aber wieder scheitern. Aber zumindest ein Teil der Konvertierung liefe damit deutlich schneller.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2013, 11:25     Titel:
  Antworten mit Zitat      
Hi,
Mit 2010a konnte ich das Problem nachvollziehen,
Wenn man einen Vektor an die datestr Funktion übergibt, gibt es in der datestr Funktion eine Abfrage, ob es nun datevectors oder einzelne datestr sind.
Da gibt es unter anderem diese Abfrage:
Code:
all(abs(sum(D,2)-2000)<500)

Das wird dann bei viele Sekunden irgendwann falsch und er fasst die Eingabe als Vektor von datenums auf.
Ob das nun ein Bug ist, keine Ahnung.
Lösungsvorschläge gabs ja schon genug, dass nur zur "Erklärung" des Problems.
Private Nachricht senden Benutzer-Profile anzeigen
 
unibw

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2013, 16:23     Titel:
  Antworten mit Zitat      
Danke für die schnelle Hilfe und die vielen hilfreichen Antworten.

Viele Grüße,
unibw
 
unibw

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2013, 16:24     Titel:
  Antworten mit Zitat      
Und für Jan S: Ich verwende die Version 2012 b
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.