全球化测试中时间日期格式的自动化验证方法

发表于:2012-1-13 10:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:宋强 陈挚 尚琨    来源:51Testing软件测试网采编

分享:

  对 Date 类型数据进行格式化返回目标语言环境下的日期格式。比如我们现在需要把得到当前日期 2011 年 9 月 9 日的法语环境下的长日期格式。

  清单 2

System.out.println(GetDateByLocal(new Date(),DateTimeByLocal.Long,new Locale("fr_FR")));
打印 : 9 septembre 2011

--------------------------------------------------------------
public static String GetDateByLocal(Date date,int style,Locale locale){
DateFormat df;
if(locale.equals(Locale.CHINA))
df = DateFormat.getDateInstance(style, ULocale.CHINA);
else
df = DateFormat.getDateInstance(style, locale);
return df.format(date);
}

  由于在自动化测试阶段,我们的数据都是从 UI 得到的,所以默认为字符串类型,这里对字符串类型数据在同一个 Locale 下不同风格之间进行转换 , 比如在简中环境下 2011-9-9 是中日期格式,转换为长日期格式后为 2011 年 9 月 9 日。

  清单 3

System.out.println(DateFormatTransform("2011-9-9",DateTimeByLocal.MEDIUM,\
                                DateTimeByLocal.Long,new Locale("zh_cn")));
打印 : 2011 年 9 月 9 日

-----------------------------------------------------------
public static String DateFormatTransform(String sDate,int OrignStyle,int targetStyle,\
Locale locale){
DateFormat df;
java.util.Date dt = null;
String longDate = "";
if(locale.equals(Locale.CHINA))
df = DateFormat.getDateInstance(OrignStyle, ULocale.CHINA);
else
df = DateFormat.getDateInstance(OrignStyle, locale);
try {
dt = df.parse(sDate);
} catch (ParseException e) {
e.printStackTrace();
}
if(dt!=null)
longDate = DateTimeByLocal.GetDateByLocal(dt,targetStyle, locale);
return longDate;
}

  在全球化测试中,我们有不同国家间时间的测试,也就是同一个日期时间在不同国家时间日期格式以及时区的校验。比如一个在北京时间是 2011-9-9 上午 11:16:26,但是在美国洛杉矶时间就是 Sep 8, 2011 8:44:01 PM,其中包含了夏令时的校验。由于 time zone 的参数比较特别,所以此方法不常用。

  清单 4

System.out.println(DateTimeFormatTransform("2011-9-9 上午 11:16:26",\
DateTimeByLocal.MEDIUM,DateTimeByLocal.MEDIUM,DateTimeByLocal.MEDIUM,\
DateTimeByLocal.MEDIUM,new Locale("zh_cn"),new Locale("en_US"),\
"America/Los_Angeles"));
打印 : Sep 8, 2011 8:16:26 PM
-------------------------------------------------------
public static String DateTimeFormatTransform(String sDate,\
int orignDateStyle,int orignDateTimeStyle,int targetDateStyle,\
int targetTimeStyle,Locale orignLocale,Locale targetLocale,\
String timezone){
DateFormat df;
java.util.Date dt = null;
String longDate = "";
if(orignLocale.equals(Locale.CHINA))
df = DateFormat.getDateTimeInstance(orignDateStyle,orignDateTimeStyle, ULocale.CHINA);
else
df = DateFormat.getDateTimeInstance(orignDateStyle,orignDateTimeStyle, orignLocale);
try {

    dt = df.parse(sDate);
} catch (ParseException e) {
e.printStackTrace();
}
if(dt!=null)

longDate = DateTimeByLocal.GetTimeByLocale(dt,targetDateStyle,targetTimeStyle,\
targetLocale,timezone);
return longDate;
}

  时间格式的标准格式化和验证与日期大同小异,这里就不在赘述。但需要说明的是,在调用 ICU 库时,应该保持与测试软件的 ICU 版本一致 , 因为不同版本之间会有一些小差别。

42/4<1234>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号