0

現地時間で日を 1 減算しようとしていますが、月次形式に従う必要もあります。

たとえば、7 月 1 日だとすると、私のプログラムは 6 月 30 日からのデータを現地時間で表示する必要がありますが、日付を 1 減算しても役に立ちません。

   my $minutes_back = 4;
   my $dt     = localtime( time - $minutes_back * 60 );
   my $date_from=sprintf("%d/%d/%d",$dt->mon,$dt->mday,$dt->year);

現在の日付を保存し、それが最初の場合は前月にバックトラックする場合は評価を行う以外に、誰かがより良い方法を持っていますか?

4

2 に答える 2

1

Perl は日時をEpoc からの秒数として保存します。Epocは通常 1970 年 1 月 1 日です。これは、世界が最初に作成された日だからです。

次に、Perl は、内部に保存された日時を実際に使用できる時間に変換するのに役立つインターフェースを提供します。

Perl 5.10 以降、Perl にはTime::PieceおよびTime::Secondsモジュールが付属しています。

use warnings;
use strict;
use feature qw(say);

use Time::Piece;
use Time::Seconds;

my $time = Time::Piece->new;   #Uses current date by default
$time -= ONE_DAY;
say $time->mdy("/");

もちろん、現在のdatetimeを使用する必要はありません。Time::Piece->strptime興味のある時間はいつでも使用できます。

my $date = "2013-Jan-01";   #Any format is fine
my $time = Time::Piece->strptime( $date, "%Y-%b-%d");
$time -= ONE_DAY;
say $time->mdy("/");  # Prints 12/31/2012

%フォーマットはstrftime Webページにあります。

于 2013-09-12T14:52:18.463 に答える