【问题标题】:RegExp to reformat date/time in VBscriptRegExp 在 VBscript 中重新格式化日期/时间
【发布时间】:2015-01-29 22:36:13
【问题描述】:

我为此搜索了无数个小时,但找不到任何可以帮助我的东西。

我正在编写一个脚本来计算 EC2 中特定实例的启动时间,并以秒为单位返回总运行时间。当我运行这个不完整的脚本时,我得到的 'gettimeoutput' 的值类似于 '2015-01-28T01:56:11.000Z'(参见参考资料)。我只想要一个正确的格式,这样我就可以使用 dateDiff() 函数来计算到当前时刻所经过的时间。

'getltimef' 将是 dateDiff 可读格式的开始时间,'timeinsec' 将是最终输出(经过的时间)。 Starttimer() 函数将启动一个静默计时器,该计时器还将不断更新 'timeinsec' 变量的值。

有人可以帮我解决这个问题吗?

参考资料:

1]PHP Parsing Amazon EC2 instance 'launchTime'

2]http://giantdorks.org/alain/how-to-test-age-of-an-aws-instance-in-a-shell-script-2

Function getinfo()

Set instanceid = CreateObject("MSXML2.XMLHTTP.3.0")
Set regiondata = CreateObject("MSXML2.XMLHTTP.3.0")

instanceid.Open "GET", "http://169.254.169.254/latest/meta-data/instance-id", False
instanceid.Send
regiondata.Open "GET", "http://169.254.169.254/latest/meta-data/placement/availability-zone", False
regiondata.Send

Const getltimeFinished = 1
Const getltimeFailed = 2
getltimeCommand = "aws ec2 --region " regiondata.responseText " describe-instances " instanceid.responseText "--filter=""launch-time"""

Set getltimeShell = CreateObject("WScript.Shell")
Set getltimeShellExec = getltimeShell.Exec(getltimeCommand)

Select Case getltimeShellExec.Status

Case getltimeFinished
   launchtimedetermined = true
   getltimeOutput = getltimeShellExec.StdOut.ReadAll

Case getltimeFailed
   launchtimedetermined = false

End Select

if (launchtimedetermined) = false Then
timeinsec = 240
Else

'getltimef script'
'getltimef = maybe regexp can work here?'
'timeinsec = datediff("s", getltimef, now())'


Call starttimer()

End Function    

谢谢!

【问题讨论】:

    标签: vbscript amazon-ec2


    【解决方案1】:

    使用 RegExp 查找由垃圾和 Date/TimeSerial() 分隔的数字;如:

    s = "2015-01-28T01:56:11.000Z"
    Set r = New RegExp
    r.Pattern = "(\d+).(\d+).(\d+).(\d+).(\d+).(\d+)"
    Set m = r.Execute(s)(0)
    d = DateSerial(CInt(m.Submatches(0)), CInt(m.Submatches(1)), CInt(m.Submatches(2))) + TimeSerial(CInt(m.Submatches(3)), CInt(m.Submatches(4)), CInt(m.Submatches(5)))
    WScript.Echo s, TypeName(d), d, "(german locale)"
    

    输出:

    cscript 28164812.vbs
    2015-01-28T01:56:11.000Z Date 28.01.2015 01:56:11 (german locale)
    

    【讨论】:

    • 感谢 Ekkehard,但您不需要将此日期/时间值从 UTC 转换为您的本地计算机时区吗?是否可以编写脚本以自动确定您的本地计算机时区?
    猜你喜欢
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多