Perl 日期和时间



  • 日期和时间

    本章将使您对如何在 Perl 中处理和操作日期和时间有基本的了解。
  • 当前日期和时间

    让我们从localtime()函数开始, 如果没有给出参数,该函数将返回当前日期和时间的值。以下是在列表上下文中使用时localtime函数返回的9元素列表-
    
    sec,     # seconds of minutes from 0 to 61
    min,     # minutes of hour from 0 to 59
    hour,    # hours of day from 0 to 24
    mday,    # day of month from 1 to 31
    mon,     # month of year from 0 to 11
    year,    # year since 1900
    wday,    # days since sunday
    yday,    # days since January 1st
    isdst    # hours of daylight savings time
    
    
    尝试以下示例打印localtime()函数返回的不同元素-
    
    @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
    @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
    
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
    print "$mday $months[$mon] $days[$wday]\n";
    
    
    尝试一下
    如果将在标量上下文中使用 localtime() 函数,则它将返回系统中设置的当前时区的日期和时间。尝试以下示例以完整格式打印当前日期和时间-
    
    $datestring = localtime();
    print "Local date and time $datestring\n";
    
    
    尝试一下
  • 格林尼治标准时间

    函数gmtime()的功能与localtime()函数的功能相同,但是返回的值针对标准的格林威治时区进行了本地化。在列表上下文中调用时,$isdst(gmtime返回的最后一个值)始终为0。GMT中没有夏令时。
    您应注意以下事实:localtime()将返回运行脚本的计算机上的当前本地时间,而gmtime()将返回通用格林威治标准时间或GMT(或UTC)。
    尝试以下示例以GMT比例打印当前日期和时间-
    
    $datestring = gmtime();
    print "GMT date and time $datestring\n";
    
    
    尝试一下
  • 格式化日期和时间

    您可以使用localtime()函数获取9个元素的列表,然后可以使用printf()函数根据您的要求格式化日期和时间,如下所示-
    
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
    
    printf("Time Format - HH:MM:SS\n");
    printf("%02d:%02d:%02d", $hour, $min, $sec);
    
    
    尝试一下
  • 时代时间

    您可以使用 time() 函数获取纪元时间,即自给定日期以来在Unix中为1970年1月1日的秒数。
    
    $epoc = time();
    
    print "Number of seconds since Jan 1, 1970 - $epoc\n";
    
    
    尝试一下
    您可以将给定的秒数转换为日期和时间字符串,如下所示:
    
    $datestring = localtime();
    print "Current date and time $datestring\n";
    
    $epoc = time();
    $epoc = $epoc - 24 * 60 * 60;   # one day before of current date.
    
    $datestring = localtime($epoc);
    print "Yesterday's date and time $datestring\n";
    
    
    尝试一下
  • POSIX函数strftime()

    您可以在下表的帮助下使用POSIX函数strftime()格式化日期和时间。请注意,标有星号(*)的说明符与语言环境有关。
    说明符 代替
    %a 工作日缩写名称* Thu
    %A 工作日全名* Thursday
    %b 月份缩写名称* Aug
    %B 月份全名* 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 2001-08-23
    %g 以周为基础的年份,后两位数字(00-99) 01
    %G 基于周的年份 2001
    %h 缩写的月份名称*(与相同%b) Aug
    %H 24小时制小时(00-23) 14
    %I 12h格式的小时(01-12) 02
    %j 一年中的一天(001-366) 235
    %m 以十进制数表示的月份(01-12) 08
    %M 分钟(00-59) 55
    %n 换行符('\n')  
    %p AM或PM指定 PM
    %r 12小时制* 02:55:02 pm
    %R 24小时HH:MM制,相当于%H:%M 14:55
    %S 秒(00-61) 02
    %t 水平制表符('\t')  
    %T ISO 8601时间格式(HH:MM:SS),等效于%H:%M:%S 14:55
    %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 日期表示* 08/23/01
    %X 时间表示* 14:55:02
    %y 年,最后两位数字(00-99) 01
    %Y 2001
    %z ISO 8601与时区UTC的偏移量(1分钟= 1,1小时= 100),如果无法确定时区,则没有字符 +100
    %Z 时区名称或缩写* ,如果无法确定时区,则没有字符 CDT
    %% 一个%标志 %
    让我们检查以下示例以了解用法-
    
    #!/usr/local/bin/perl
    use POSIX qw(strftime);
    
    $datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
    printf("date and time - $datestring\n");
    
    # or for GMT formatted appropriately for your locale:
    $datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
    printf("date and time - $datestring\n");
    
    
    尝试一下