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, 5889 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
Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Tipp von ChriBo vor 17 StundenFirewall

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Internet
Copyright-Reform: Upload-Filter
Information von Frank vor 2 TagenInternet

Hallo, viele Menschen reden aktuell von Upload-Filtern. Sie reden darüber, als wären es eine Selbstverständlichkeit, das Upload-Filter den Seitenbetreibern ...

Google Android

Blokada: Tracking und Werbung unter Android unterbinden

Information von AnkhMorpork vor 2 TagenGoogle Android1 Kommentar

In Ergänzung zu meinem vorherigen Beitrag: Blokada efficiently blocks ads, tracking and malware. It saves your data plan, makes ...

Google Android
Facebooks unsichtbare Datensammlung
Information von AnkhMorpork vor 2 TagenGoogle Android2 Kommentare

Rund 30 Prozent aller Apps im Play-Store nehmen Kontakt zu Facebook auf, sobald man sie startet. So erfährt der ...

Heiß diskutierte Inhalte
Linux Userverwaltung
LogIn Versuche beschränken auf EINEN Versuch
gelöst Frage von GarroshLinux Userverwaltung23 Kommentare

Folgendes Problem Ich habe einen dezidierten Server beim Hoster gemietet, installiert ist Ubuntu 18.04.2 LTS‬ und als Webinterface Plesk. ...

Backup
Wo installiert man Veeam bei SoHo?
Frage von EDVMan27Backup14 Kommentare

Hallo, nachdem ich die neue Veeam CE bei mir getestet habe, wollte ich es einmal bei einem Kunden testen. ...

Internet
Aktuell HP-Support-Seite kaputt?
gelöst Frage von LochkartenstanzerInternet12 Kommentare

Hallo Kollegen, Weiß einer von euch, seit wann die HP-Support-Seite kaputt ist? ) Wollte heute morgen Druckertreiber runterladen und ...

Ubuntu
Exchange Alternative auf Ubuntu
Frage von TELLOUbuntu11 Kommentare

Hi NG, wir müssen für unsere Kleine Firma (5 User) das Email / Kalendersystem neu einrichten. Ich könnte jetzt ...