从AUT获取日期?

时间:2015-06-11 09:40:50

标签: date vbscript locale qtp hp-uft

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

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

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

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

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

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

例如,允许我明确指定要使用的语言环境的DateValue变体会很棒。有这样的事吗?

一般来说,它不仅仅是关于日期,而是根据区域设置(时间规格,货币金额,浮点数......)格式不同的每个数据项。

2 个答案:

答案 0 :(得分:3)

不确定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

答案 1 :(得分:1)

虽然据说(由Microsoft,https://technet.microsoft.com/en-us/library/ee176965.aspx提出)GetLocaleSetLocale仅在WebPages中可用,但这些功能正是我所寻求的。他们在QTP内工作。

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

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

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

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