どんなに変換する日付/時刻、画期的な時間(unix時間/秒1970年以降)Perl?

StackOverflow https://stackoverflow.com/questions/95492

質問

れを日付/時刻としての配列を年、月、日、時、分、秒、あなたは何点ぐらいになると思いに変換する画期的な時間の秒数から1970-01-01 00:00:00GMTか?

ボーナスの質問:が変更されていない場合は、日付/時刻文字列として、あなたは何点ぐらいになると思い最初の構文解析する(y,m,d,h,m,s)配列?

役に立ちましたか?

解決 2

するのにもっとも簡単な方法で取得しunix時間:

use Time::Local;
timelocal($second,$minute,$hour,$day,$month-1,$year);

注逆の順序で引数の、一月は月に0になります。多くのオプションは、 DateTime モジュールからCPAN.

として構文解析の 日本解析 モジュールからCPAN.の場合の必要はな派手な日付の解析に 日本Manip するのに役立つかもしれないが、独自の書類を警告しまかされたとしても多くのお荷物預かのような共通の休業)や他のソリューションはより高速にします。

せてもらう良い機会になりそうだんうつの形式の日付/時代かを解析して簡単な正規表現をいっしょに基づいており、また以下の適切なCPANモジュールです。例えば、がわかっている場合は、それを日常にYMDHMSめ、CPANモジュール 日時::フォーマット::iso8601形式.


私自身、何といっても、以下の機能を使っていた申請がんの日常にYMDHMS注文の全部又は一部を"HMS"アルオプションです。受け入れ意の区切り文字(例えば、"2009-02-15"または"2009.02.15").を返します対応unix時間(秒以1970-01-01 00:00:00GMT)場合は-1ることができなかった解析でいことを意味しますよくない適法に必要な構文の日1969-12-31 23:59:59).でも推定二桁年XXまでの"69"を参照して"20xx年"、"19XX"(例えば、"50-02-15"と2050-02-15が"75-02-15"と1975-02-15).

use Time::Local;

sub parsedate { 
  my($s) = @_;
  my($year, $month, $day, $hour, $minute, $second);

  if($s =~ m{^\s*(\d{1,4})\W*0*(\d{1,2})\W*0*(\d{1,2})\W*0*
                 (\d{0,2})\W*0*(\d{0,2})\W*0*(\d{0,2})}x) {
    $year = $1;  $month = $2;   $day = $3;
    $hour = $4;  $minute = $5;  $second = $6;
    $hour |= 0;  $minute |= 0;  $second |= 0;  # defaults.
    $year = ($year<100 ? ($year<70 ? 2000+$year : 1900+$year) : $year);
    return timelocal($second,$minute,$hour,$day,$month-1,$year);  
  }
  return -1;
}

他のヒント

でご利用の場合は、 DateTime モジュール、話ができる 時代() 法DateTimeオブジェクト以降のお返事ありがとうございます。どのunix時間です。

使用DateTimesきに変換するかなり簡単に画期的なのは、日付オブジェクト。

Alternativly, localtime とgmtimeするためには、画期的な入を含む配列を日年月、timelocalとtimegmから 時間::地域のモジュール の逆に変換する配列の要素(秒、分、...、日、月など) になりました。

構文解析の日付は、発 日本解析 ではCPAN.

$ENV{TZ}="GMT";
POSIX::tzset();
$time = POSIX::mktime($s,$m,$h,$d,$mo-1,$y-1900);

そうすることを義務付けられているもうと思ったことも答えです。

Time::Piece 主としてのPerl5.9.5

この構文解析時間の任意の形式の strptime 方法。

例えば:

my $t = Time::Piece->strptime("Sunday 3rd Nov, 1943",
                              "%A %drd %b, %Y");

の有部での過オブジェクトで無い場合、お名前をお書き添えのための数字の比較.

例えば

if ( $t < time() ) { #do something }

又はアクセスする場合は、文字列コンテクスト:

print $t,"\n"; 

す:

Wed Nov  3 00:00:00 1943

あるバンチのアクセス用メソッドを一部の盛り合わせその他の有用な時間基準の変換. https://metacpan.org/pod/Time::Piece

取得日::ManipからCPAN, とします。

use Date::Manip;
$string = '18-Sep-2008 20:09'; # or a wide range of other date formats
$unix_time = UnixDate( ParseDate($string), "%s" );

編集:

日本Manipにありが遅かったですが、非常に柔軟な構文解析し、純粋なperlです。利用までお急ぎの場合だけ書きコード、あけましておめでとうございますすることはできませんでお急ぎの場合だ走ります。

例えば使用する構文解析コマンドラインオプションを一度に起動、利用がないので解析で大量のデータをwebサーバです。

著者らはコメント.

(著者の最初のコメント下)

私の好きなdatetimeモジュール 日時::フォーマット::iso8601形式 またそこで働いDateTimeオブジェクト、簡単にconvertableる画期的な秒エポック()

多くの日付操作モジュールCPAN.私が特に気に入りです DateTime とで利用できます strptimeモジュール 構文解析の写真を任意のフォーマット多くの日時::フォーマットモジュールCPAN扱うための専門日付フォーマットがstrptimeもっとも一般的です。

と、将来の参考用途での、ライナートすることで、例えば、 !#/bin/sh イントロダクションです。

EPOCH="`perl -e 'use Time::Local; print timelocal('${SEC}','${MIN}','${HOUR}','${DAY}','${MONTH}','${YEAR}'),\"\n\";'`"

とを覚えておいてくださいなoctalす。

その一つの例のように"ではなく、CPAN.

だって管理いただくものとして渡され、'日時'で、私示唆するもの DateTime 経路のいずれかを使用特定の日時::フォーマットサブクラス、使用したDateTime::フォーマット::Strptimeがないと一をサポートいたします。贈日付フォーマットの datetimeのFAQ ているものとする。一般的に、日本時間の道のりたいのであれば何でも重大な結果には:複数の授業ではCPANかして肛門-保持力の回答お願す。

だ期待しおかフリーフォーム、スライスにしてジンギスカンで 日本解析's str2time()メソッドは、うま秒から-画期的な価値を押して愛する方法、オーバーヘッドのない、 日本Manip.

フィルタの変換日に各種ISO関連フォーマット(人で使えば、読み の著作 の強Kuhn?) 標準入力を秒での画期的な時間を標準出力に出力がとを明ら両パーツ:

martind@whitewater:~$ cat `which isoToEpoch`
#!/usr/bin/perl -w
use strict;
use Time::Piece;
# sudo apt-get install libtime-piece-perl
while (<>) {
  # date --iso=s:
  # 2007-02-15T18:25:42-0800
  # Other matched formats:
  # 2007-02-15 13:50:29 (UTC-0800)
  # 2007-02-15 13:50:29 (UTC-08:00)
  s/(\d{4}-\d{2}-\d{2}([T ])\d{2}:\d{2}:\d{2})(?:\.\d+)? ?(?:\(UTC)?([+\-]\d{2})?:?00\)?/Time::Piece->strptime ($1, "%Y-%m-%d$2%H:%M:%S")->epoch - (defined ($3) ? $3 * 3600 : 0)/eg;
  print;
}
martind@whitewater:~$ 

だ見ているだけでコマンドラインユー(なまると呼ばれる他の機能から、このスクリプトではの存在GNU日現在のクLinuxシステム):

#! /usr/bin/perl -w

use strict;

$_ = (join ' ', @ARGV);
$_ ||= <STDIN>;

chomp;

if (/^[\d.]+$/) {
    print scalar localtime $_;
    print "\n";
}
else {
    exec "date -d '$_' +%s";
}

この作品:

$ Time now
1221763842

$ Time yesterday
1221677444

$ Time 1221677444
Wed Sep 17 11:50:44 2008

$ Time '12:30pm jan 4 1987'
536790600

$ Time '9am 8 weeks ago'
1216915200
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top