GMT からローカルタイム(JST)に変換

概要

  • GMT を CPAN:HTTP-Date および Perl 標準機能のみを使ってローカルタイムに変換する。
  • GMTtoLocal2 は時差の指定は無視する。

ソース

  • fileGMTtoLocal.zip
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    |
    !
     
     
     
     
     
     
    -
    |
    |
    !
     
     
     
     
     
    -
    |
    |
    -
    |
    |
    !
    |
    !
     
     
    
    #!/usr/bin/perl
    # GMT からローカルタイム(JST)に変換
     
    use strict;
    use warnings;
    use utf8;
    use Encode;
    use HTTP::Date qw( time2str str2time time2iso );
    use POSIX qw(strftime);
    use Time::Local;
     
    my $charsetConsole    = 'CP932';
    my $charsetFile        = 'UTF-8';
     
    binmode( STDIN,  ":encoding($charsetConsole)" );
    binmode( STDOUT, ":encoding($charsetConsole)" );
    binmode( STDERR, ":encoding($charsetConsole)" );
     
    my @sample = ( 
        '2011-11-23T00:00:00Z', 
        '2011-12-31T20:00:00Z', 
        '2012-02-28T21:00:00+00:00', 
        '2012-02-28T21:00:00+09:00', 
    );
     
    foreach my $src ( @sample ){
        printf( "Source\t\t%s\nHTTP::Date\t%s\nStandard\t%s\n\n", 
            $src, GMTtoLocal1( $src ), GMTtoLocal2( $src ) );
    }
     
    exit();
     
    # HTTP::Date を使用
    # http://search.cpan.org/dist/HTTP-Date/
    sub GMTtoLocal1
    {
        my( $gmt ) = @_;
        return time2iso( str2time( $gmt, 'Asia/Tokyo' ) );
    }
     
    # Perl標準機能のみ
    # http://chalow.net/2010-03-01-5.html
    # 時差の指定は無視して常にGMTと見なす。
    sub GMTtoLocal2
    {
        my( $gmt ) = @_;
        my $ret = $gmt;
        if ( $gmt =~ /^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)/ ){
            my $utm = timegm( $6, $5, $4, $3, $2-1, $1 );
            $ret = strftime( "%Y-%m-%d %H:%M:%S", localtime( $utm ) );
        }
        return $ret;
    }
     
    # EOF
    

出力

Source		2011-11-23T00:00:00Z
HTTP::Date	2011-11-23 09:00:00
Standard	2011-11-23 09:00:00

Source		2011-12-31T20:00:00Z
HTTP::Date	2012-01-01 05:00:00
Standard	2012-01-01 05:00:00

Source		2012-02-28T21:00:00+00:00
HTTP::Date	2012-02-29 06:00:00
Standard	2012-02-29 06:00:00

Source		2012-02-28T21:00:00+09:00
HTTP::Date	2012-02-28 21:00:00
Standard	2012-02-29 06:00:00

添付ファイル: fileGMTtoLocal.zip 442件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Wed, 12 Sep 2012 00:15:32 JST (2137d)