Uhrzeiten berechnen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:20 Di 04.12.2007 | Autor: | Wuif |
Aufgabe | Vergleich von Uhrzeiten - nachträgliches Abgleichen von Messdaten |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt
Hallo,
ich bin auf der Suche nach einer möglichkeit, Messwerte aus zwei verschiedenen Excel-dateien abzugleichen.
Ich brauche eine Idee, wie ich von einer gespeicherten Uhrzeit die Messdauer in Sekunden abziehen kann, und somit den Anfangszeitpunkt bestimmen kann.
Das Problem ist, die Messdauer ist in Sekunden und die Uhrzeit im Format: [num2str(mm),'/',num2str(dd),'/',num2str(yyyy)]
Ich habe bereits die Daten (Datum und Uhrzeit in folgenden Zeilen eingelesen:
[Messdaten_Logger,Einheiten_Logger]= xlsread(file,activesheet,'A1:E10000'); %bei allen Kanälen gehts weiter!
%verkleinern
Einheiten_Logger=Einheiten_Logger(1:2,1:size(Einheiten_Logger,2));
%Datum und Zeit auslesen
[dd,mm,yyyy]=strread(Einheiten_Logger{2,1},'%d.%d.%d');
Datum_Logger_str=[num2str(mm),'/',num2str(dd),'/',num2str(yyyy)]
Datum_Logger_str=datestr(Datum_Logger_str);
%Aufschreiben
Datum_Logger{klog,1}=Datum_Logger_str
Datum_Logger{klog,2}=datestr(Messdaten_Logger(1,1));
Datum_Logger{klog,3}=datestr(Messdaten_Logger(size(Messdaten_Logger,1),1))
Das Ganze kommt dann in für das erste Messsystem folgendermaßen in den Speicher:
Datum_Logger=
'16-Nov-2007' ' 4:42 PM' ' 7:46 PM' %Datum Anfangszeit Endzeit
'19-Nov-2007' '11:46 AM' '12:56 PM'
'
An dieser Stelle muss die zweite Spalte als Uhrzeit ausgegeben werden:
Die zweite Messung ist von einem anderen System und gibt die Daten wie folgt aus:
[Messdaten_LDV,Einheiten_LDV]= xlsread(file,activesheet,'A1:T1010');
[dd,mm,yyyy,time_saved_LDV]=strread(char(Einheiten_LDV(1,2)), '%*s %*s %*s %d.%d.%d %s')
Datum_LDV{LDV,1}=[num2str(mm),'/',num2str(dd),'/',num2str(yyyy)];
Datum_LDV{LDV,1}=datestr(Datum_LDV{LDV,1});
Datum_LDV{LDV,2}=Messdaten_LDV(size(Messdaten_LDV,1),7);
Datum_LDV{LDV,3}=datestr(time_saved_LDV,13);
Datum_LDV=
'16-Nov-2007' 4726.2 '18:09:08' %Datum Messdauer Endzeit
'19-Nov-2007' 3594.3 '13:00:06'
'16-Nov-2007' 1988.3 '19:49:48'
'16-Nov-2007' 1988.3 '19:49:48'
'16-Nov-2007' 4726.2 '18:09:08'
'19-Nov-2007' 3594.3 '13:00:06'
hier muss die Anfangszeit berechnet werden!
Leider kenne ich keine Möglichkeit, wie die Sekunden von der Endzeit abgezogen werden können.
Als Ergebnis müsste z.B. rauskommen:
18:09:08-4726.2=16:48:34
Im Anschluss an die Bestimmung der Anfangs und Endzeitpunkte wird abgeglichen, ob die Messung am gleichen Tag durchgeführt wurde und falls
sich die Messzeiten überschneiden die aufgenommenen Daten gemeinsam in einen neuen Vektor geschrieben.
Ich denke, ich bin schon fast am Ziel, aber das bereitet mir Kopfzerbrechen...
ich dachte, dass ich mit diesen Befehlen weiterkomme:
Datum_LDV{1,2} %Wert in Sekunden:
ans =
4.7262e+003
%Da kommt der gleich Mist raus!
sec2hms(Datum_LDV{1,2})
test = timedim(Datum_LDV{1,2},'seconds','hms')
%ans =
%
% 118.4624
time2str(Datum_LDV{1,2},'24','hms','hms')
ans =
%das ist zu spät!
23:26:24
Ich würde mich riesig freuen, wenn mir jemand weiterhelfen kann.
Gruß Wolfgang
|
|
|
|
Hallo,
ein Beispiel, wie man es angehen könnte:
d = '16-Nov-2007' ;
d_sec = 1988.3;
t_end = '19:49:48';
d_start = datestr(datenum([d ' ' t_end])-d_sec/86400, 'local');
Das liefert uns die Startzeit:
16-Nov-2007 19:16:39
oder:
t_start = datestr(datenum([d ' ' t_end])-d_sec/86400,'HH:MM:ss','local');
Dann bekommen wir nur die Uhrzeit.
Ach ja:
Die Umwandlung des Datumsformats zu Beginn deines Skript klappt prima mit:
datestr(datenum('5.12.2007','dd.m.yyyy'),'local')
Und statt
Einheiten_Logger=Einheiten_Logger(1:2,1:size(Einheiten_Logger,2));
kannst du schreiben:
Einheiten_Logger=Einheiten_Logger(1:2,:);
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:54 Mo 10.12.2007 | Autor: | Wuif |
Hallo Martin,
vielen Dank für die Hilfe, ich hab das Problem so gelöst:
[Messdaten_Logger,Einheiten_Logger]= xlsread(file,activesheet,'A1:E10000');% {k_log,1}%bei allen Kanälen gehts weiter!
%Datum und Zeit auslesen
%Aufschreiben in eine variable:
am_Logger=datestr(datenum(Einheiten_Logger{2,1},'dd.m.yyyy'),'local')
von_Logger=datestr(datenum([am_Logger ' ' datestr(Messdaten_Logger(1,1))]))
bis_Logger=datestr(datenum([am_Logger ' ' datestr(Messdaten_Logger(size(Messdaten_Logger,1)))]))
Datum_Logger{k_log,1}=am_Logger;
Datum_Logger{k_log,2}=von_Logger; % in dieser SPalte wird die Dauer ab dem Messanfang aufgezeichnet!
Datum_Logger{k_log,3}=bis_Logger; %13 'HH:MM:SS' 15:45:17
[Messdaten_LDV,Einheiten_LDV]= xlsread(file,activesheet,'A1:T1010');
[dd,mm,yyyy,time_saved_LDV]=strread(char(Einheiten_LDV(1,2)), '%*s %*s %*s %d.%d.%d %s')
am_LDV=datestr([num2str(mm),'/',num2str(dd),'/',num2str(yyyy)])
time_saved_LDV=datestr(time_saved_LDV,13)
Messdauer=Messdaten_LDV(size(Messdaten_LDV,1),7); %der letzte Wert in der Zeitreihe ist die Messdauer
bis_LDV=datestr(datenum([am_LDV ' ' time_saved_LDV])) %kein problem, da kein Messprotokoll länger als 24h dauert.
von_LDV=datestr(datenum([am_LDV ' ' time_saved_LDV])-Messdauer/86400, 'local');
Datum_LDV{LDV,1}=am_LDV;
Datum_LDV{LDV,2}=von_LDV; % in dieser SPalte wird die Dauer ab dem Messanfang aufgezeichnet!
Datum_LDV{LDV,3}=bis_LDV; %13 'HH:MM:SS' 15:45:17
Datum_LDV{LDV,4}=Messdauer %[s]
Die Variablen Datum_LDV und Datum_Logger sind jetzt identisch im Aufbau und vergleichbar...
Vielen Dank für die Hilfe!
Gruß Wolfgang
|
|
|
|