zoukankan      html  css  js  c++  java
  • 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 '%'.
  • 相关阅读:
    hdu2653 Waiting ten thousand years for Love
    Request
    freetextbox 使用方法+下载
    格式化字符串 GridView DataFormatString
    GridView 中的button LinkButton 事件 CommandName
    Response 缓存
    Windows 7下VS2008升级
    ASP.NET中备份SQL Server数据库的方法
    asp.net和c#实现定时备份数据库(SQL Server2000)
    asp.net 中保存 数据库几种对象
  • 原文地址:https://www.cnblogs.com/tjxwg/p/2910131.html
Copyright © 2011-2022 走看看