写点什么

软件测试 | 以编程方式对时间值进行编码

  • 2023-08-17
    北京
  • 本文字数:1008 字

    阅读完需:约 3 分钟

更多学习资料戳!!!

问题

你已经决定你的应用以某种有趣的方式来使用时间,现在你希望以特定格式生成特定的值。

解决方案

对这种工作而言,Perl 是一件很棒的工作。你将需要 Time::Local 模块来对 Unix 时间戳进行某些处理,还需要 POSIX 模块中的 strftime。这两个都是标准模块。例 4-3 中的代码演示了 4 中不同的格式以及如何计算它们。

例 4-3:使用 Perl 对各种各样的时间值进行编码

#!/usr/bin/perluse Time::Local;use POSIX qw(strftime);#  June 1, 2008, 5:32:11pm and 844 milliseconds$year = 2008;$month = 5;   # months are numbered starting at 0!$day   = 1;  $hour  = 17;  #use 24-hour clock for clarity$min   = 32;$sec   =  11;$msec  =  844;
# UNIX Time(Seconds since Jan 1,1970) 1212355931$unixtime = timelocal($sec,$ min,$hour,$day,$month,$year);print "UNIX\t\t\t$unixtime\n";
# populate a few values (wday,yday,isdst)that well need for strftime($sec,$min,$hour,$mday,$mon,$year, $wday,$yday,$isdst)= localtime($unixtime);
# YYYYMMDDhhmmss.sss 20080601173211.844# We use strftime() because it accounts for Perl is zero-based month numbering$timestring = strftime("%Y%m%d%H%M%S", $sec,$min,$hour,$mday,$mom,$year,$wday,$yady,$isdst);$timestring .= "$msec";print "YYYYMMDDhhmmss.sss\t\$timestring\n";
# YYMMDDhhmm 0806011732$timestring = strftime("%y%m%d%H%M",$sec,$min,$hour,$mday, #mom,$year,$wday,$yday,$isdst);print "YYMMDDhhmm\t\t$timestring\n";
# POSIX in "C" Local Sum Jun 1 17:32:11 2008$gmtime = localtime($unixtime);print"POSIX\t\t\t$gmtime\n";
复制代码

讨论

你可以使用 perldoc Time::Local 或 man strftime 来找出有关于格式化时间的方法的更多信息。

警告:Perl 在时间方面的古怪行为

尽管 Perl 非常灵活,而且无疑是完成这项工作的一件极好的工具,但它有自己的古怪行为。在编写像这样的代码时,请注意月份取值。因为一些费解的原因,它们从 0 开始对月份计数。也就是说,一月份对应 0,二月份对应 1,而不是一月份对应 1.日期则不是这样。每个月的第一天对应 1。此外,你需要注意的编码方式。年份从 1900 开始计数。因此,1999 年对应 99,而 2008 年对应 108.要获得正确的年份取值,必须增加 1900.尽管经历; 前年虫事件,但是至今仍有网站将日期显示为 6/28/108。

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 以编程方式对时间值进行编码_测试_测吧(北京)科技有限公司_InfoQ写作社区