从 AUT 获取日期?

Get dates from AUT?

我的基于 Web 的应用程序(与大多数应用程序一样)遵循浏览器区域设置来格式化日期。

因此,如果您将英式英语配置为浏览器中的首选语言,应用程序将以“DD/MM/YYYY”格式显示日期。

现在 QTP(好吧,罪魁祸首是 VBScript)不知道这个。它严格遵循本地计算机的区域设置。

不幸的是,这意味着如果我的本地计算机配置为德语语言环境,并且应用程序是英文的(因为浏览器是这样配置的),VBScript 的 DateValue 函数将失败(因为它期望“DD.MM.YYYY”格式。

那么将 AUT 显示的日期值转换为本机 VBScript 日期以便我可以对其进行日历计算和检查的优雅方法是什么?

除了将当前用户的语言环境切换到与浏览器语言相匹配的语言环境之外,我没有看到一个解决方案可以避免自己为所有类型的语言环境编写 decoders/encoders --对我来说似乎太过分了。

例如,DateValue 变体可以让我明确指定要使用的语言环境。有这种东西吗?

一般来说,它不仅与日期有关,而且每个数据项的格式都因地区而异(时间规范、货币金额、浮点数……)。

虽然据说(Microsoft,参见 https://technet.microsoft.com/en-us/library/ee176965.aspxGetLocaleSetLocale 只能在网页中使用,但这些功能正是我要找的。他们在 QTP 内工作。

要将日期值从 AUT(字符串)转换为 VBScript 日期值,我

  • 调用 GetLocale 获取并保存原始语言环境
  • 调用 SetLocale 切换到与浏览器相同的语言环境(从注册表中读取)
  • 使用 DateValue 将字符串转换为本机日期(或使用任何其他对语言环境敏感的例程)
  • 使用原始设置调用 SetLocale 以切换回原始语言环境。

有趣的是,QTP 总是在系统区域设置处于活动状态时开始执行测试——即使最后一次测试执行确实留下了不同的区域设置活动。

参见 f.e。 https://support.microsoft.com/de-de/kb/232158/en-us

不确定 QTP,但 windows 脚本主机通过 SetLocale

处理它
Option Explicit

Dim originalLocale
    originalLocale = GetLocale()

Dim aLocales
    aLocales = Array("en-us", "es-es", "de")

Dim locale, aDates, d

    For Each locale in aLocales
        WScript.Echo locale
        SetLocale locale

        aDates = Array( Date(), DateValue("01/02/2015"))
        For Each d in aDates
            WScript.Echo FormatDateTime(d, 1)
            WScript.Echo FormatDateTime(d, 2)
        Next 
        WScript.Echo "-------------------------------------------------"
    Next

    SetLocale originalLocale