我的基于Web的应用程序(与大多数人一样)遵循浏览器区域设置来格式化日期。
因此,如果您将英国英语配置为浏览器中的首选语言,该应用程序将以“DD/MM/YYYY
”格式显示日期。
现在QTP(确定,它是VBScript的罪魁祸首)并不知道这一点。它严格遵循本地计算机的区域设置。
不幸的是,这意味着如果我的本地计算机配置为德语语言环境,并且应用程序是英语(因为浏览器是以这种方式配置的),VBScript的DateValue
函数将失败(因为它期望“ DD.MM.YYYY
“格式。
那么将AUT显示的日期值转换为本机VBScript日期的优雅方法是什么,以便我可以进行日历计算和检查?
除了将当前用户的语言环境切换为与浏览器语言相匹配的语言环境之外,我没有看到一个解决方案,它避免了我自己为所有类型的语言环境编写解码器/编码器 - 这看起来像一个巨大的对我来说太过分了。
例如,允许我明确指定要使用的语言环境的DateValue
变体会很棒。有这样的事吗?
一般来说,它不仅仅是关于日期,而是根据区域设置(时间规格,货币金额,浮点数......)格式不同的每个数据项。
答案 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提出)GetLocale
和SetLocale
仅在WebPages中可用,但这些功能正是我所寻求的。他们在QTP内工作。
要将日期值从AUT(作为字符串)转换为VBScript日期值,我
GetLocale
以获取并保存原始区域设置SetLocale
切换到与浏览器相同的区域设置(从注册表中读取)DateValue
将字符串转换为本机日期(或使用任何其他区域设置敏感的例程)SetLocale
以切换回原始区域设置。有趣的是,QTP始终在系统区域设置处于活动状态时启动测试执行 - 即使最后一次测试执行确实留下了不同的区域设置活动。