VBScript, das einen Datums-Befehl in der Form date MMTThhmmJJJJ.ss plus ENTER ausgibt, wie dieser von den GNU coreutils erwartet wird. Anwendungsfall ist z. B. ein Raspberry Pi oder ähnlicher Einplatinencomputer ohne Echtzeituhr, der ohne Internetverbindung betrieben wird, aber von einem anderen Computer aus wenigstens ungefähr sekundengenau nachgestellt werden soll (das Konstrukt ⌈Timer⌉−Timer, wobei Timer für die verstrichenen Sekunden des Tages mit Nachkommastellen steht, sorgt in etwa dafür, dass bis zum Beginn einer vollen Sekunde gewartet wird).
Option Explicit
Function PositiveCeil(FloatNo)
PositiveCeil = Int(FloatNo)
If PositiveCeil < FloatNo Then
PositiveCeil = PositiveCeil + 1
End If
End Function
Dim WshShell, sleeptime, unixtime, unixstr, secondstr
Set WshShell = WScript.CreateObject("WScript.Shell")
sleeptime = Int(1000*(PositiveCeil(Timer())-Timer())-100)
If sleeptime > 0 Then
WScript.Sleep sleeptime
End If
unixtime = Now()
Rem MMddHHmmyyyy.ss
unixstr = CStr(Year(unixtime) + 10000 * Minute(unixtime) + 1000000 * Hour(unixtime) + 100000000 * Day(unixtime) + 10000000000 * Month(unixtime))
If Month(unixtime) < 10 Then
unixstr = "0" & unixstr
End If
If Second(unixtime) < 10 Then
secondstr = "0" & Second(unixtime)
Else
secondstr = CStr(Second(unixtime))
End If
unixstr = unixstr & "." & secondstr
WshShell.SendKeys "%{TAB}"
WScript.Sleep 100
WshShell.SendKeys "date " & unixstr & "~"
Alles anzeigen
Ähnlich, aber nur in geänderter Reihenfolge verfährt man bei einem BSD-System, wo der Befehl das Datum in der mehr am internationalen Standard angelehnten Form JJJJMMTThhmm.ss akzeptiert.
Zeile 19 sollte dann wie folgt aussehen, Zeile 20-22 fallen dann weg:
unixstr = CStr(Minute(unixtime) + 100 * Hour(unixtime) + 10000 * Day(unixtime) + 1000000 * Month(unixtime) + 100000000 * Year(unixtime))