"2012-02-03 00:00:00"の形式の日付のあるperlの日付計算には助けが必要です。特に、日数を増やすのに使うことのできるツールがあり、それは月と年に正しく切り替わりますか?ありがとう。perl date計算書式の日付2012-02-03 00:00:00
3
A
答えて
8
DateTimeを参照してください。
#!/usr/bin/env perl
use strict; use warnings;
use DateTime;
my $ts = '2012-02-03 00:00:00';
my ($y, $m, $d) = ($ts =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/);
my $dt = DateTime->new(year => $y, month => $m, day => $d);
$dt->add(months => 2, days => 3);
print $dt->strftime('%Y-%m-%d %H:%M:%S'), "\n";
は、それは実際のDateTime :: Formatクラスを使用するには少しクリーナーだ、とあなたは自由のためのエラーチェックを取得します。
use DateTime::Format::Strptime qw();
my $format = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%d %H:%M:%S',
time_zone => 'local',
on_error => 'croak',
);
my $ts = '2012-02-03 00:00:00';
my $dt = $format->parse_datetime($ts);
$dt->add(months => 2, days => 3);
print $format->format_datetime($dt), "\n";
1
Time::Piece
モジュールは、Perlのインストールの標準一部であり、おそらくあなたが必要なものをすべて行います。
このプログラムでは、あなたのサンプルの日付を使用し、2ヶ月と3日、さらに400日を追加します。値を表示する二つの別の方法は、これはPOSIX
時間処理関数を使用して、コア内のすべての完全に可能である
use strict;
use warnings;
use Time::Piece;
use Time::Seconds 'ONE_DAY';
my $format = '%Y-%m-%d %H:%M:%S';
my $dt = Time::Piece->strptime('2012-02-03 00:00:00', $format);
$dt = $dt->add_months(2);
$dt += 3 * ONE_DAY;
print $dt->strftime($format), "\n";
$dt += 400 * ONE_DAY;
printf "%s %s\n", $dt->ymd, $dt->hms;
出力
2012-04-06 00:00:00
2013-05-11 00:00:00
1
を示しています。
標準POSIX::mktime
関数はすでに非正規化された値に対応しており、範囲外の日数/月を修正することができます。さらに、POSIX::strftime
は、実際にはフォーマット前にこの値を呼び出しているため、正しく調整されます。
use POSIX qw(strftime mktime);
use POSIX::strptime qw(strptime);
my $format = "%Y-%m-%d %H:%M:%S";
my @t = strptime("2012-02-03 00:00:00", $format);
@t = @t[0..5]; # Throw away wday and yday
$t[3] += 3; # mday
$t[4] += 2; # mon
say strftime $format, @t;
$t[3] += 400; # mday
say strftime $format, @t;
は
2012-04-06 00:00:00
2013-05-11 00:00:00
関連する問題
- 1. perlの日付差の計算方法
- 2. 日付別のCrystalレポートの計算式
- 3. SO日付の計算と書式設定
- 4. 日付計算
- 5. 日付の計算
- 6. Perl日付形式変換
- 7. SSRSの日付計算 - ケース?
- 8. 日付の書式は日付
- 9. Java - 日付書式
- 10. 差異日付計算
- 11. ロケールのJava日付書式
- 12. PHP日付の書式
- 13. クリスタルレポートのカスタム日付書式
- 14. Javaのシステム日付書式
- 15. SQLiteクエリの日付書式
- 16. DATE行の日付範囲の日付
- 17. drupal形式で日付を計算する
- 18. PostgreSQLの書式化時間の集計関数の日付( 'date_format')
- 19. PHP - 日付形式の書式設定
- 20. の書式日付「日DD/MM/YYYY」
- 21. iOSの日付書式の日付書式を追加する方法「目」、「ST」
- 22. GWT日付書式設定
- 23. iPhone SDK日付書式
- 24. XSD日付書式オーバーライド
- 25. JQGrid日付書式設定
- 26. Ember.jsの日付差の計算
- 27. 計算SQLの日付間の年数
- 28. シェルスクリプトの日付計算方法
- 29. トリッキーなPHP/MySQLの日付計算
- 30. 四半期ごとの日付計算
を与えるまた、ダウン少しより多くのコードを削り取っするhttps://metacpan.org/module/DateTime::Format::MySQLで見ることができます。 – oalders
さまざまな特定の形式に縛られるのではなく、私は[DateTime :: Format :: Strptime](http://search.cpan.org/dist/DateTime-Format-Strptime/)を参照してください。 – runrig
Hope you don '私はStrptimeの例を追加しました。元のコードの出力も修正しました。日付と時刻の間に望ましくない「T」がありました。 – ikegami