Time::Piece - Perl日期时间处理

摘要:

    use Time::Piece;

    

    my $t = localtime;

    print "Time is $t\n";

    print "Year is ", $t->year, "\n";

用法:

    $t->sec                 # also available as $t->second

    $t->min                 # also available as $t->minute

    $t->hour                # 24 hour

    $t->mday                # also available as $t->day_of_month

    $t->mon                 # 1 = January

    $t->_mon                # 0 = January

    $t->monname             # Feb

    $t->month               # same as $t->monname

    $t->fullmonth           # February

    $t->year                # based at 0 (year 0 AD is, of course 1 BC)

    $t->_year               # year minus 1900

    $t->yy                  # 2 digit year

    $t->wday                # 1 = Sunday

    $t->_wday               # 0 = Sunday

    $t->day_of_week         # 0 = Sunday

    $t->wdayname            # Tue

    $t->day                 # same as wdayname

    $t->fullday             # Tuesday

    $t->yday                # also available as $t->day_of_year, 0 = Jan 01

    $t->isdst               # also available as $t->daylight_savings



    $t->hms                 # 12:34:56

    $t->hms(".")            # 12.34.56

    $t->time                # same as $t->hms



    $t->ymd                 # 2000-02-29

    $t->date                # same as $t->ymd

    $t->mdy                 # 02-29-2000

    $t->mdy("/")            # 02/29/2000

    $t->dmy                 # 29-02-2000

    $t->dmy(".")            # 29.02.2000

    $t->datetime            # 2000-02-29T12:34:56 (ISO 8601)

    $t->cdate               # Tue Feb 29 12:34:56 2000

    "$t"                    # same as $t->cdate



    $t->epoch               # seconds since the epoch

    $t->tzoffset            # timezone offset in a Time::Seconds object



    $t->julian_day          # number of days since Julian period began

    $t->mjd                 # modified Julian date (JD-2400000.5 days)



    $t->week                # week number (ISO 8601)



    $t->is_leap_year        # true if it its

    $t->month_last_day      # 28-31



    $t->time_separator($s)  # set the default separator (default ":")

    $t->date_separator($s)  # set the default separator (default "-")

    $t->day_list(@days)     # set the default weekdays

    $t->mon_list(@days)     # set the default months



    $t->strftime(FORMAT)    # same as POSIX::strftime (without the overhead

                            # of the full POSIX extension)

    $t->strftime()          # "Tue, 29 Feb 2000 12:34:56 GMT"

    

    Time::Piece->strptime(STRING, FORMAT)

                            # see strptime man page. Creates a new

                            # Time::Piece object

日期计算:

简单日期加减

    use Time::Seconds;

    

    my $seconds = $t1 - $t2;

    $t1 += ONE_DAY; # add 1 day (constant from Time::Seconds)

下列的算是是有效的($t1 and $t2 是Time::Piece objects)

    $t1 - $t2; # returns Time::Seconds object

    $t1 - 42; # returns Time::Piece object

    $t1 + 533; # returns Time::Piece object

然而 Time::Piece 相加会产生异常,相减返回Time::Seconds object,通过Time::Seconds API返回分钟,小时,天,星期,年。

除了能加秒, 还有两个API函数能加月,年:

$t->add_months(6);

$t->add_years(5);

月和年通过负数可以变为减。

日期比较操作

日期可以使用 "<", ">", "<=", ">=", "<=>", "==" and "!=" 进行比较

日期解析

Time::Piece 通过  strptime()  函数(from FreeBSD), 进行日期格式的转换.

  my $t = Time::Piece->strptime("Sunday 3rd Nov, 1943",

                                "%A %drd %b, %Y");

  

  print $t->strftime("%a, %d %b %Y");

附录一:Time::Seconds

常量:

    ONE_DAY

    ONE_WEEK

    ONE_HOUR

    ONE_MINUTE

    ONE_MONTH

    ONE_YEAR

    ONE_FINANCIAL_MONTH

    LEAP_YEAR

    NON_LEAP_YEAR

方法:

    my $val = Time::Seconds->new(SECONDS)

    $val->seconds;

    $val->minutes;

    $val->hours;

    $val->days;

    $val->weeks;

    $val->months;

    $val->financial_months; # 30 days

    $val->years;

    $val->pretty; # gives English representation of the delta

附录二:转义符说明:

     %A    is replaced by national representation of the full weekday name.



     %a    is replaced by national representation of the abbreviated weekday

       name.



     %B    is replaced by national representation of the full month name.



     %b    is replaced by national representation of the abbreviated month

       name.



     %C    is replaced by (year / 100) as decimal number; single digits are

       preceded by a zero.



     %c    is replaced by national representation of time and date.



     %D    is equivalent to ``%m/%d/%y''.



     %d    is replaced by the day of the month as a decimal number (01-31).



     %E* %O*

       POSIX locale extensions.  The sequences %Ec %EC %Ex %EX %Ey %EY %Od

       %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy are supposed to

       provide alternate representations.



       Additionally %OB implemented to represent alternative months names

       (used standalone, without day mentioned).



     %e    is replaced by the day of the month as a decimal number (1-31);

       single digits are preceded by a blank.



     %F    is equivalent to ``%Y-%m-%d''.



     %G    is replaced by a year as a decimal number with century.  This year

       is the one that contains the greater part of the week (Monday as

       the first day of the week).



     %g    is replaced by the same year as in ``%G'', but as a decimal number

       without century (00-99).



     %H    is replaced by the hour (24-hour clock) as a decimal number

       (00-23).



     %h    the same as %b.



     %I    is replaced by the hour (12-hour clock) as a decimal number

       (01-12).



     %j    is replaced by the day of the year as a decimal number (001-366).



     %k    is replaced by the hour (24-hour clock) as a decimal number (0-23);

       single digits are preceded by a blank.



     %l    is replaced by the hour (12-hour clock) as a decimal number (1-12);

       single digits are preceded by a blank.



     %M    is replaced by the minute as a decimal number (00-59).



     %m    is replaced by the month as a decimal number (01-12).



     %n    is replaced by a newline.



     %O*   the same as %E*.



     %p    is replaced by national representation of either "ante meridiem"

       (a.m.)  or "post meridiem" (p.m.)  as appropriate.



     %R    is equivalent to ``%H:%M''.



     %r    is equivalent to ``%I:%M:%S %p''.



     %S    is replaced by the second as a decimal number (00-60).



     %s    is replaced by the number of seconds since the Epoch, UTC (see

       mktime(3)).



     %T    is equivalent to ``%H:%M:%S''.



     %t    is replaced by a tab.



     %U    is replaced by the week number of the year (Sunday as the first day

       of the week) as a decimal number (00-53).



     %u    is replaced by the weekday (Monday as the first day of the week) as

       a decimal number (1-7).



     %V    is replaced by the week number of the year (Monday as the first day

       of the week) as a decimal number (01-53).  If the week containing

       January 1 has four or more days in the new year, then it is week 1;

       otherwise it is the last week of the previous year, and the next

       week is week 1.



     %v    is equivalent to ``%e-%b-%Y''.



     %W    is replaced by the week number of the year (Monday as the first day

       of the week) as a decimal number (00-53).



     %w    is replaced by the weekday (Sunday as the first day of the week) as

       a decimal number (0-6).



     %X    is replaced by national representation of the time.



     %x    is replaced by national representation of the date.



     %Y    is replaced by the year with century as a decimal number.



     %y    is replaced by the year without century as a decimal number

       (00-99).



     %Z    is replaced by the time zone name.



     %z    is replaced by the time zone offset from UTC; a leading plus sign

       stands for east of UTC, a minus sign for west of UTC, hours and

       minutes follow with two digits each and no delimiter between them

       (common form for RFC 822 date headers).



     %+    is replaced by national representation of the date and time (the

       format is similar to that produced by date(1)).



     %-*   GNU libc extension.    Do not do any padding when performing numeri-

       cal outputs.



     %_*   GNU libc extension.    Explicitly specify space for padding.



     %0*   GNU libc extension.    Explicitly specify zero for padding.



     %%    is replaced by '%'.

你可能感兴趣的:(perl)