Florian Ragwitz > Time-Local-1.2000 > Time::Local
Time-Local-1.2000 "efficiently compute time from local and GMT time" 02 Jan 2011


Time::Local - efficiently compute time from local and GMT time

このモジュールは、ローカルおよびGMT時間から効率よく time を計算します。


    $time = timelocal($sec,$min,$hour,$mday,$mon,$year);
    $time = timegm($sec,$min,$hour,$mday,$mon,$year);


This module provides functions that are the inverse of built-in perl functions localtime() and gmtime(). They accept a date as a six-element array, and return the corresponding time(2) value in seconds since the system epoch (Midnight, January 1, 1970 GMT on Unix, for example). This value can be positive or negative, though POSIX only requires support for positive values, so dates before the system's epoch may not work on all operating systems.

このモジュールは、Perl 組込み関数 localtime()とgmtime()の逆関数を提供します。これらは6つの要素からなる配列として日付を受け取り、システムエポック(たとえばUnixでは、1970年1月1日GMT深夜)からの秒の値=time(2)を返します。POSIXは正の値のみをサポートしているため、負の値となる日付ではすべてのオペレーティングシステムで機能するというわけではない。

It is worth drawing particular attention to the expected ranges for the values provided. The value for the day of the month is the actual day (ie 1..31), while the month is the number of months since January (0..11). This is consistent with the values returned from localtime() and gmtime().



timelocal() and timegm()

This module exports two functions by default, timelocal() and timegm().

このモジュールは2つの関数( timelocal関数とtimegm関数)をexportします。

The timelocal() and timegm() functions perform range checking on the input $sec, $min, $hour, $mday, and $mon values by default.

timelocal()とtimegm() 関数は、デフォルトで入力値($sec,$min,$hour,$mday,$mon) の範囲チェックを行っています。

timelocal_nocheck() and timegm_nocheck()

If you are working with data you know to be valid, you can speed your code up by using the "nocheck" variants, timelocal_nocheck() and timegm_nocheck(). These variants must be explicitly imported.

    use Time::Local 'timelocal_nocheck';

    # The 365th day of 1999
    print scalar localtime timelocal_nocheck 0,0,0,365,0,99;

If you supply data which is not valid (month 27, second 1,000) the results will be unpredictable (so don't do that).


Year Value Interpretation

Strictly speaking, the year should be specified in a form consistent with localtime(), i.e. the offset from 1900. In order to make the interpretation of the year easier for humans, however, who are more accustomed to seeing years as two-digit or four-digit values, the following conventions are followed:

厳密に言うと、年はlocaltime()と一致した形(すなわち1900からのオフセット)で指定されるべきです。 しかし、人は、年を2桁もしくは4桁の値とすることで、簡単に解釈できるようになっています。 そのため、以下のような慣例が設けられています。
  • 「999年より大きな引数」では、1900からのオフセットではなく、実際の年と解釈されます。そのため、「1964」という値は、マーティン・ルーサー・キングがノーベル賞を獲得した年のことを示しており、3864年のことではありません。
  • 「100..999の範囲の引数」では、1900からのオフセットと解釈されます。そのため、「112」は2012年を示します。このルールはゼロ未満の値のときにも適用されます(しかし、下記の「日付範囲」に注意してください。)
  • 「0..99の範囲の引数」では、今年を挟む50年(今世紀)の年の短縮形と解釈されます。そのため、今日が1999年の場合、0は2000年を、45は2045年を示しますが、55は1955年を示します。20年後(2019年)になると、55は2055年を示すことになります。これは面倒なことですが、人々が現在の年を2桁で表現することに合致しています。しかしながら、できるうる限り、4桁の「年」を使用するべきです。
  • The scheme above allows interpretation of a wide range of dates, particularly if 4-digit years are used.


    Limits of time_t

    On perl versions older than 5.12.0, the range of dates that can be actually be handled depends on the size of time_t (usually a signed integer) on the given platform. Currently, this is 32 bits for most systems, yielding an approximate range from Dec 1901 to Jan 2038.

    Perlバージョン 5.12.0より古い場合は、扱える年月日の範囲はプラットフォームの time_t のサイズ(符号付整数)によります。現在、time_t はほとんどのシステムで32ビットであり、ほぼ1901年12月から2038年の範囲となります。

    Both timelocal() and timegm() croak if given dates outside the supported range.


    As of version 5.12.0, perl has stopped using the underlying time library of the operating system it's running on and has its own implementation of those routines with a safe range of at least +/ 2**52 (about 142 million years).

    Perl 5.12.0では、少なくとも2の52乗(142百万)の安全な範囲のルーチンを実装することにより、オペレーティングシステムのtimeライブラリの使用を停止しました。

    Ambiguous Local Times (DST)

    Because of DST changes, there are many time zones where the same local time occurs for two different GMT times on the same day. For example, in the "Europe/Paris" time zone, the local time of 2001-10-28 02:30:00 can represent either 2001-10-28 00:30:00 GMT, or 2001-10-28 01:30:00 GMT.

    現地時間は変化するため、同じ現地時間が同じ日に2つの異なるGMTからの時間差が発生するため、多くのタイムゾーンがあります。たとえば、"Europe/Paris"タイムゾーンでは、「2001-10-28 02:30:00」の現地時間は、「 2001-10-28 00:30:00 GMT」でも「2001-10-28 01:30:00 GMT」でも代表させることができます。

    When given an ambiguous local time, the timelocal() function should always return the epoch for the earlier of the two possible GMT times.

    あいまいな現地時間を決める際、timelocal() 関数は、常にどちらかもしくは両方のGMT時間がエポックからの経過秒数を返さなければなりません。

    Non-Existent Local Times (DST)

    When a DST change causes a locale clock to skip one hour forward, there will be an hour's worth of local times that don't exist. Again, for the "Europe/Paris" time zone, the local clock jumped from 2001-03-25 01:59:59 to 2001-03-25 03:00:00.

    ローカル時間が1時間変化したら、存在しない1時間ができてしまうことでしょう。たとえば、欧州パリ時間の場合、ローカル時計で 2001-03-25 01:59:59 の1秒後が 2001-03-25 03:00:00 に飛んでしまうことになります。

    If the timelocal() function is given a non-existent local time, it will simply return an epoch value for the time one hour later.

    timelocal() 関数は、存在しない1時間があったとしても、それは単に1時間後のエポック秒を返すだけです。

    Negative Epoch Values

    On perl version 5.12.0 and newer, negative epoch values are fully supported.

    Perl 5.12.0以降のバージョンでは、マイナスのエポック秒もフルサポートします。

    On older versions of perl, negative epoch (time_t) values, which are not officially supported by the POSIX standards, are known not to work on some systems. These include MacOS (pre-OSX) and Win32.

    古いPerlバージョンでは、マイナスのエポック(time_t)の値は、POSIX標準では公式にはサポートされておらず、そのシステム上では動作しないことが知られています。この状態は MacOS(pre-OS) と Win32 も同様です。

    On systems which do support negative epoch values, this module should be able to cope with dates before the start of the epoch, down the minimum value of time_t for the system.



    These routines are quite efficient and yet are always guaranteed to agree with localtime() and gmtime(). We manage this by caching the start times of any months we've seen before. If we know the start time of the month, we can always calculate any time within the month. The start times are calculated using a mathematical formula. Unlike other algorithms that do multiple calls to gmtime().


    The timelocal() function is implemented using the same cache. We just assume that we're translating a GMT time, and then fudge it when we're done for the timezone and daylight savings arguments. Note that the timezone is evaluated for each date because countries occasionally change their official timezones. Assuming that localtime() corrects for these changes, this routine will also be correct.

    timelocal() 関数は、同じキャッシュを使って実行されます。GMT時間を変換する際、まず、タイムゾーンと夏時間を設定します。タイムゾーンは国ごとの正式なタイムゾーンに沿って各々の日付を評価します。 localtime()をタイムゾーンごとにあわせてあれば、そのルーチンも正しい結果を返します。

    BUGS ^

    The whole scheme for interpreting two-digit years can be considered a bug.



    Support for this module is provided via the email list. See for more details.


    Please submit bugs to the CPAN RT system at or via email at

    バグレポートは、 もしくは、""にお願いします。


    Copyright (c) 1997-2003 Graham Barr, 2003-2007 David Rolsky. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

    The full text of the license can be found in the LICENSE file included with this module.

    AUTHOR ^

    This module is based on a Perl 4 library,, that was included with Perl 4.036, and was most likely written by Tom Christiansen.

    The current version was written by Graham Barr.

    It is now being maintained separately from the Perl core by Dave Rolsky, <>.