在写程序时,经常需要去判断指定的某一天,是星期几。但遗憾的是,大多数的编程语言,支持的都不太好。也就是说,判断起来比较麻烦。
在Perl语言中,最方便的是安装Date::Calc,然后使用Day_of_Week方法,可以直接返回某一天是星期几。但需要安装Calc,比较麻烦。
可以通过这个链接下载Calc:http://sb.fluomedia.org/download/pkg/Date-Calc-XS-6.2.tar.gz
【相关的链接有很多Perl语言包的安装文件下载:http://sb.fluomedia.org/download/】
如果不使用Calc的话,可以使用localtime函数,返回某一天的星期。
代码如下:
#!/usr/bin/perl use strict; use Time::Local; my $mon=12; my $mday=16; my $year=2018; my $time=timelocal(0,0,0,$mday,$mon-1,$year); my $wday=(localtime($time))[6]; print $wday;
对于localtime函数的返回值,也可以使用strftime函数格式化出星期几。
print strftime("星期:%u",localtime( $time ));
strftime在格式化日期显示方面,是个很好用的方法。它还支持很多其他的日期格式化格式,下面我列了一下,供大家参考:
符号 | 说明 | 示例 |
%a | 星期几的简称( Sun..Sat) * | Thu |
%A | 星期几的全称( Sunday..Saturday) * | Thursday |
%b | 月的简称(Jan..Dec) * | Aug |
%B | 月的全称(January..December) * | August |
%c | 日期和时间 * | Thu Aug 23 14:55:02 2001 |
%C | 年份除于100,并取整 (00-99) | 20 |
%d | 一个月的第几天 (01-31) | 23 |
%D | 日期, MM/DD/YY 相等于%m/%d/%y | 08/23/01 |
%e | 一个月的第几天,使用空格填充个位数 ( 1-31) | 23 |
%F | YYYY-MM-DD 的简写类似于 %Y-%m-%d | 37126 |
%g | 年份的最后两位数 (00-99) | 1 |
%g | 年 | 2001 |
%h | 月的简称 * (和%b选项相同) | Aug |
%H | 24 小时制 (00-23) | 14 |
%I | 12 小时制 (01-12) | 2 |
%j | 一年的第几天 (001-366) | 235 |
%m | 月 (01-12) | 8 |
%M | 分钟 (00-59) | 55 |
%n | 新行 ('\n') | |
%p | 显示出AM或PM | PM |
%r | 时间(hh:mm:ss AM或PM),12小时 * | 0.621550926 |
%R | 24 小时 HH:MM 时间格式,相等于 %H:%M | 0.621527778 |
%S | 秒数 (00-61) | 2 |
%t | 水平制表符 ('\t') | |
%T | 时间(24小时制)(hh:mm:ss),相等于%H:%M:%S | 0.621527778 |
%u | ISO 8601 的星期几格式,星期一为1 (1-7) | 4 |
%U | 一年中的第几周,星期天为第一天(00-53) | 33 |
%V | ISO 8601 第几周 (00-53) | 34 |
%w | 一个星期的第几天(0代表星期天) (0-6) | 4 |
%W | 一年的第几个星期,星期一为第一天 (00-53) | 34 |
%x | 显示日期的格式(mm/dd/yy) * | 08/23/01 |
%X | 显示时间格式 * | 0.621550926 |
%y | 年,两位数 (00-99) | 1 |
%Y | 年 | 2001 |
%z | ISO 8601与UTC的时区偏移(1 minute=1, 1 hour=100) | 100 |
%Z | 当前时区的名称,如"中国标准时间" * | CDT |
%% | % 符号 | % |