对 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 版本一致 , 因为不同版本之间会有一些小差别。