持之以恒

          記錄本
          posts - 4, comments - 32, trackbacks - 0, articles - 74
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          perl的時(shí)間處理之localtime和strftime

          Posted on 2012-03-28 15:09 小白19870626 閱讀(7678) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): linux

          大家都是使用的 localtime 來(lái)取得當(dāng)?shù)厝掌跁r(shí)間和日期。這個(gè)函數(shù)如果在標(biāo)量環(huán)境時(shí),會(huì)以字符串的形式來(lái)傳回目前的時(shí)間和日期 。默認(rèn)的 localtime 的函數(shù)是以 1970 到今天的秒來(lái)做整數(shù)計(jì)算的。默認(rèn)這個(gè)程序會(huì)調(diào)用 time 的函數(shù)來(lái)給它提供一個(gè)值。
          使用方法:

          例如,print scalar (localtime)這個(gè)代碼,它輸出的結(jié)果將類(lèi)似于Thu Sep 16 23:00:06 1999。在列表上下文中,localtime將返回能夠描述當(dāng)前時(shí)間的一個(gè)元素列表:
          (
          $sec,$min,$hour,$mday,$mon,$year_off,$wday,$yday,$isdat) = localtime;
          字段 值
          $sec 秒,0 ~ 59
          $min 分,0 ~ 59
          $hour 時(shí),0 ~ 23
          $mday 月份中的日期, 1 ~ 2 8、2 9、3 0或3 1
          $mon 年份中的月份, 0 ~ 11(這里請(qǐng)?zhí)貏e要小心)
          $year_off 1900年以來(lái)的年份。將1900加上這個(gè)數(shù)字,得出正確的4位數(shù)年份
          $wday 星期幾,0 ~ 6
          $yday 一年中的第幾天,0 ~ 364或365
          $isdst 如果夏令時(shí)有效,則為真
          不要將19附加給localtime返回的年份。它返回的年份是1900的偏移量。比如,在1999年,年份是99;在2000年中,它是100,將 1999與該值相加,可以在2000年以后正確地產(chǎn)生年份。perl不存在2000年問(wèn)題,但是,如果簡(jiǎn)單地將19(或20)附加給該年份,就會(huì)導(dǎo)致程序中產(chǎn)生2000年問(wèn)題

          真正的年月日 就是: $year_off + 1900 , $mon+1,$mday

          上面這個(gè)函數(shù)常用,但是返回值非常亂,可讀性非常不好,讓我們很容易出錯(cuò),所以我推薦 strftime 這個(gè)時(shí)間函數(shù)。當(dāng)然,還有另一個(gè)模塊 DataTime 也相當(dāng)不錯(cuò)。不過(guò) strftime 非常象 Linux 常用的 date 的命令。strftime 是 C 中 POSIX 的一個(gè)功能函數(shù)。被包含進(jìn)了 Perl 中。好象 PHP 也是支持的

          使用起來(lái)很容易,如下:

          #!/usr/bin/perl
          use strict;
          use warnings;
          use POSIX qw(strftime);
          print strftime("%Y-%m-%d %H:%M:%S\n", localtime(time));

          會(huì)輸出
          2010-08-21 07:44:24

          Strftime 時(shí)間域 :( 這個(gè)和 date 的命令的字符格式是一樣的)
          % H 小時(shí)(00..23)
          % I 小時(shí)(01..12)
          % k 小時(shí)(0..23)
          % l 小時(shí)(1..12)
          % M 分(00..59)
          % p 顯示出AM或PM
          % r 時(shí)間(hh:mm:ss AM或PM),12小時(shí)
          % s 從1970年1月1日00:00:00到目前經(jīng)歷的秒數(shù)
          % S 秒(00..59)
          % T 時(shí)間(24小時(shí)制)(hh:mm:ss)
          % X 顯示時(shí)間的格式(%H:%M:%S)
          % Z 時(shí)區(qū) 日期域
          % a 星期幾的簡(jiǎn)稱(chēng)( Sun..Sat)
          % A 星期幾的全稱(chēng)( Sunday..Saturday)
          % b 月的簡(jiǎn)稱(chēng)(Jan..Dec)
          % B 月的全稱(chēng)(January..December)
          % c 日期和時(shí)間( Mon Nov 8 14:12:46 CST 1999)
          % d 一個(gè)月的第幾天(01..31)
          % D 日期(mm/dd/yy)
          % h 和%b選項(xiàng)相同
          % j 一年的第幾天(001..366)
          % m 月(01..12)
          % w 一個(gè)星期的第幾天(0代表星期天)
          % W 一年的第幾個(gè)星期(00..53,星期一為第一天)
          % x 顯示日期的格式(mm/dd/yy)
          % y 年的最后兩個(gè)數(shù)字( 1999則是99)
          % Y 年(例如:1970,1996等)

          常用的實(shí)例

          得到日期的全部

          perl -MPOSIX -le 'print strftime "%c", localtime();'

          Sat 21 Aug 2010 07:54:34 AM CST

          得到普通的指定的日期

          perl -MPOSIX -le 'print strftime "%a %d %b %Y %H:%M:%S %Z", localtime();'

          Sat 21 Aug 2010 07:54:11 CST

          得到一個(gè)小時(shí)以前的時(shí)間

          perl -MPOSIX -le 'print strftime "%c", localtime(time()-3600);'

          Sat 21 Aug 2010 06:55:54 AM CST

          得到一天前的時(shí)間

          perl -MPOSIX -le 'print strftime "%c", localtime(time()-86400);'

          Fri 20 Aug 2010 07:56:36 AM CST










          小白
          主站蜘蛛池模板: 内江市| 平江县| 五常市| 红河县| 株洲市| 拜城县| 镶黄旗| 岳普湖县| 墨江| 漠河县| 金寨县| 家居| 桦甸市| 婺源县| 南雄市| 西乌珠穆沁旗| 阿勒泰市| 苏尼特左旗| 班玛县| 图木舒克市| 西充县| 上杭县| 乌拉特中旗| 清涧县| 江都市| 安阳县| 淮安市| 滦南县| 辰溪县| 胶南市| 昔阳县| 巫山县| 太原市| 石泉县| 高阳县| 广饶县| 浏阳市| 工布江达县| 筠连县| 喀什市| 平利县|