Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Zeit aus Sekunden berechnen

Mitglied: stoner

stoner (Level 1) - Jetzt verbinden

02.09.2006, aktualisiert 03.09.2006, 5862 Aufrufe, 5 Kommentare

Ahoi zusammen,

ich lese aus verschiedenen Dateien bestimmte Felder aus und spiele diese in eine Datenbank ein (automatisiert alle 10 minuten).
Mein Problem ist, dass diese Dateien aus verschiedenen Quellen stammen, somit sind auch die Felder z.T. unterschiedlich.

Speziell ein Feld macht Probleme:
In der 1. Datei ist dieses Feld in Time Format angegeben, z.B. "00:03:12" für 3 minuten und 12 Sekunden,
in der 2. Datei steht die Zeit im Sekunden Format : "000192".

nun sollte ich das Format der 2. in das Time Format der ersten umwandeln da beide Dateien in die gleiche Tabelle eingelesen werden, das Feld steht als Parameter %t% bereit.

Ich habe die letzten Tage das Web nach einer Lösung durchsucht jedoch ohne ein Ergebnis. Am besten wäre eine Lösung als reine bat, mit nem freeware (command Line) tool oder ne vbs wäre auch kein Prob.

besten Dank schon mal,

Frank
Mitglied: Biber
03.09.2006 um 01:35 Uhr
Tja, stoner,

dann werf ich mal als Erster ein kleines Batch-Freewaretool in den Ring.
01.
::--- snipp Secs2TimeFmt.bat
02.
@echo off & setlocal
03.
Call :secsToTimeFmt %1
04.
echo in:[%1] out:[%TimeFmt%]
05.
goto :eof
06.
 
07.
:secsToTimeFmt
08.
Set /a "hrs=100"
09.
set /a "Sec=((1%1-1000000)%%60) + 500"
10.
set /a "min=(1%1-1000000)/60"
11.
If %min% GEQ 60 set /a "hrs=(%min%/60)+100"
12.
If %min% GEQ 60 set /a "min=%min%-((%hrs%-100)*60)"
13.
Set /a "min+=100"
14.
Set "timefmt=%hrs:~1%:%min:~1%:%sec:~1%"
Demo am Cmd-Prompt:
01.
$cmd$for %i in (000195 000001 006483) do @Secs2TimeFmt.bat %i
02.
in:[000195] out:[00:03:15]
03.
in:[000001] out:[00:00:01]
04.
in:[006483] out:[01:48:03]
Der Batch selbst ist ja nur zu Demo-Zwecken.
In Deinen tatsächlichen Batch brauchst Du ja nur den Block ":secsToTimeFmt" übernehmen.

Gruß
Biber
Bitte warten ..
Mitglied: stoner
03.09.2006 um 13:30 Uhr
Hallo Biber,

besten Dank wieder mal für deine Hilfe, dass ganze klappt wunderbar, und nachdem ich eine halbe Stunde über die bat gegrübelt habe ist mir auch einiges klar über die Syntax.
Kleine Änderung da Millisekunden als Quellwert:
01.
Set /a "hrs=100"
02.
Set /a "sec=((1%1-100000)/10%%60) + 500"
03.
Set /a "min=(1%1-100000)/600"
04.
If %min% GEQ 60 set /a "hrs=(%min%/60)+100"
05.
If %min% GEQ 60 set /a "min=%min%-((%hrs%-100)*60)"
06.
Set /a "min+=100"
07.
Set "timefmt=%hrs:~1%:%min:~1%:%sec:~1%"
Soweit klappt alles, nur werden die Werte nicht gerundet, sondern die millisek. abgeschnitten. gibt es eine Möglichkeit den Wert zu runden?
+500 bei den sec, haben die einen bestimmten Grund? klappt mit z.b. 100 auch.

@Biber besten Dank nochmal für deine Hilfe, mittlerweile komm ich immer besser zurecht, eine Frage hät ich noch zur Syntax (zu einem älteren Thema):

Set "zeile=%*" Setzt den kompletten Input in den Parameter zeile
Set zeile=%zeile: =% löscht leerzeichen im Parameter zeile
Set zeile=%zeile:;;=;0;% ersetzt ;; mit ;0; wieder im Parameter zeile

Habe ich den Code richtig interpretiert? Irgendwie ist mir das noch ein bischen schleierhaft mit dem ändern des Parameters zeile mit dem gleichen Parameternamen. Ebenso mit dem Syntax der Parameter innerhalb der %-Zeichen.

Schönen Sonntag noch,

stoner
Bitte warten ..
Mitglied: Biber
03.09.2006 um 13:59 Uhr
Moin stoner,
und nachdem ich eine halbe Stunde über die bat gegrübelt habe ist mir auch einiges klar über die Syntax
So war es gedacht ... ich hab auch bewusst mit Kommentaren gegeizt gestern.
Denn ohne Anpassungen wird es nicht gehen, dachte ich, und deshalb musst Du Dich eben mit diesem kryptischen Zeug auseinandersetzen.
eine Frage hät ich noch zur Syntax (zu einem älteren Thema):
Set "zeile=%*" Setzt den kompletten Input in den Parameter zeile
Set zeile=%zeile: =% löscht leerzeichen im Parameter zeile
Set zeile=%zeile:;;=;0;% ersetzt ;; mit ;0; wieder im Parameter zeile
Habe ich den Code richtig interpretiert?
Dreimal JA auf alle Fragen.
Der Platzhalter %* steht für "alle übergebenen Parameter".
Die Zeichen-Ersetzen-Funktion ist halt wirklich so schlicht mit "ersetze Zeichen vor dem Gleichheitszeichen mit Zeichen nach dem Gleichheitszeichen".
Sieht in einigen konkreten Fällen definitiv merkwürdig aus, so z.B. beim Ersetzen von Leerzeichen durch "nichts".
Aber die Funktion tut, was sie verspricht.

+500 bei den sec, haben die einen bestimmten Grund? klappt mit z.b. 100 auch.
Okay, das war nur ein Verständnistest. Hast bestanden.
Geht natürlich auch mit 100 oder 400 oder 11100...
Ist nur zur Verhinderung von Zahlenwerten wie "07" , "08", "09" , die von Buggybuggybuggy-CMD als Oktal interpretiert werden.
Und bei "Set /a sec=09" würde es knallen:
01.
Z:\>
02.
$cmd$set /a sec=09
03.
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
04.
hexadezimale (0x11) oder oktale (021) Zahlen.
Deshalb "rechne" ich eigentlich immer mit Zahlen größer 100.... und nehme dann für die Anzeige die letzten beiden Ziffern.
Oben in meinem Batch-Schnipsel wäre es auch richtiger so gewesen:
01.
..
02.
Set /a "sec=((1%1-100000)/10%%60) + 500"        && REM wichtig hier nur: es soll ein dreistelliger Wert rauskommen, deshalb +500
03.
...
04.
Set "timefmt=%hrs:~-2%:%min:~-2%:%sec:~-2%"
...also lieber jeweils die letzten 2 Zeichen als die Zeichen ab Zeichen 2... (da hatte ich geschlampt *gg)

Soweit klappt alles, nur werden die Werte nicht gerundet, sondern die millisek. abgeschnitten. gibt es eine Möglichkeit den Wert zu runden?
Jein... runden direkt nicht.
Aber wenn es wichtig ist, dann folgende Strategie (angenommen, ich hätte 1788 Millisekunden):
01.
$cmd$set /a sec=1788/100
02.
17   --------------> was ja abgeschnitten wäre
03.
$cmd$set /a msec=1788%100
04.
88 ----> alles, was nach dem zukünftigen Komma bei Sek steht
05.
....und wenn dieser Wert größer ist als 50, dann eine Sekunde draufpacken.
Im Batch sinngemäß:
01.
...
02.
REM sagen wir mal, Parameter 1 sind die 1788 Millisecs
03.
set /a "sec=%1/100"
04.
REM 17   --------------> was ja abgeschnitten wäre
05.
set /a msec=%1%%100
06.
REM msecs sind 88 ----> alles, was nach dem zukünftigen Komma bei Sek steht; 
07.
REM der Modulo-Operator wird im Batch als "%%" geschrieben!
08.
REM ....und wenn dieser Wert größer ist als 50, dann eine Sekunde draufpacken.
09.
IF %msecs% GTR 50 set /a "secs+=1"
Dir auch schönen Restsonntag
Biber
Bitte warten ..
Mitglied: stoner
03.09.2006 um 17:40 Uhr
Hallo Biber,

besten Dank, dein letztes Posting hat mir die Augen geöffnet, schön langsam wird mir klar was da in meiner bat vor sich geht , sind ja mittlerweile auch schon 100 zeilen code.
Ich habe das mit den 1/10 Sekunden (nicht ms) folgendermassen gelöst:

01.
::Rufdauer in das Time Format ändern (1/10s)
02.
Set /a "ehrs=100"
03.
Set /a "esec=((1%e%-1000)/10%%60) + 500"
04.
Set /a "emin=(1%e%-1000)/600"
05.
Set /a "emsec=(1%e%-1000)%%10"
06.
If %emsec% GEQ 5 set /a "esec=%esec%+1"
07.
If %emin% GEQ 60 set /a "ehrs=(%emin%/60)+100"
08.
If %emin% GEQ 60 set /a "emin=%emin%-((%hrs%-100)*60)"
Besten Dank nochmal,

stoner
Bitte warten ..
Mitglied: Biber
03.09.2006 um 19:08 Uhr
Jepp, stoner,

ich sehe, Du hast es verstanden.
Sieht gut aus

Und ob es nun Zehntel-, Hundertstel- oder Tausendstelsekunden sind, das ändert ja nichts an der Mimik.

Ich setze den Beitrag mal auf gelöst, lass ihn aber offen.
Vielleicht wird ja noch eine *.vbs-Variante oder ein anderer Algorithmus gepostet.

Schönen Abend
Biber
Bitte warten ..
Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 23 StundeniOS

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 1 TagiOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 3 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 3 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Exchange Server
Exchange Server 2010: Keine Eingehenden E-MAils
gelöst Frage von gabeBUExchange Server17 Kommentare

Hallo Zusammen Ich habe das kurzen auf dem Exchange 2010 Server das Problem, dass ich keine externen E-Mails mehr ...

Windows Netzwerk
Kerio. Kann keine Mails empfangen aber senden. Wer ist schuld. Kerio oder Windows domäne?
gelöst Frage von frosch2Windows Netzwerk14 Kommentare

Hallo, es existiert ein Problem bei uns mit dem mailen. Alle bestehenden Nutzer können mailen. Raus wie rein. Neuen ...

Viren und Trojaner
"Erpressermail" über eigenen web.de-Account
gelöst Frage von istike2Viren und Trojaner13 Kommentare

Hallo Zusammen, ein User aus dem Team hat folgende "Erpressermail" scheinbar von dem eigenen Mailaccount bekommen: Da die User ...

Server
Server in zwei verschiedene Netzwerke einbinden
gelöst Frage von BennyFServer13 Kommentare

Hallo zusammen, bei uns im Haus sind im Erdgeschoss die Geschäftsräume und ab dem 1. Stock sind unsere privaten ...