我將從文件中讀取隨機日期,我想從該日期開始減少4個月。我在Perl編程,但我可以使用bash命令。月前從bash或perl給定日期的日期開始
如果我有10/14/2013我會得到06/14/2013。
非常感謝!
卡里姆
我將從文件中讀取隨機日期,我想從該日期開始減少4個月。我在Perl編程,但我可以使用bash命令。月前從bash或perl給定日期的日期開始
如果我有10/14/2013我會得到06/14/2013。
非常感謝!
卡里姆
use DateTime::Format::Strptime qw();
my $format = DateTime::Format::Strptime->new(
pattern => '%m/%d/%Y',
on_error => 'croak',
);
my $dt = $format->parse_datetime('10/14/2013');
$dt->subtract(months => 4);
say $format->format_datetime($dt);
$ date '+%m/%d/%Y' --date='02/14/2013 4 month ago'
10/14/2012
適用於Linux系統,但不適用於FreeBSD系統。 –
@SlavenRezic爲了準確,這可以在'GNU Coreutils'的'date'中使用。 – devnull
的CPAN module Date::Manip非常適合這樣的事情。 Date:Manip功能非常強大,它可以理解工作日和節假日......並且可以解析任意日期字符串,如「下週二」或「8月的第三個星期四」。
你應該嘗試一下;我敢打賭你會發現它非常有用。
這裏有一個簡短的例子在解決您當前的問題:
#!/usr/bin/perl
use Date::Manip;
my $d = new Date::Manip::Date("10/18/2013");
print $d->printf("%c"), "\n";
my $delta = new Date::Manip::Delta("4 months ago");
my $od = $d->calc($delta);
print $od->printf("%c"), "\n";
...這會產生以下結果:
Fri Oct 18 00:00:00 2013
Tue Jun 18 00:00:00 2013
要注意的是有更多的天他們比其他幾個月的!
這裏就是1個月減去給你,你可能沒想到
endOfMarch=$(date -d "2017-03-31")
today=$endOfMarch
echo $(date -d "$today -1 month" "+%Y-%m-%d")
2017-03-02
因爲二月份只有28天回答一個例子,一個減去一個月有效地創建這顯然不日期2017-02-31
存在,因此已蔓延額外的天進入三月給你2017-03-02
取決於你想怎麼解決,您可以可靠地計算n
個月前,通過創建日期變量設置爲當前的第一天月,然後減去幾個月。
endOfMarch=$(date -d "2017-03-31")
today=$endOfMarch
firstDayOfMonth=$(date -d "$today" "+%Y-%m-01")
echo $(date -d "$firstDayOfMonth -1 month" "+%Y-%m-%d")
2017-02-01
所以,現在你有正確的Month
(即二月減1一個月的時候),然後你必須弄清楚什麼Day
新的日期設置爲根據您的使用情況。
所以加法/減法月是不是直線前進的人們可能會認爲
https://metacpan.org/pod/Date::Simple – toolic
我已經做了我與UnixDate過去的工作,但我試圖找到我所做的,但沒有得到任何積極的結果在谷歌。 – Karem
非常感謝您的幫助 – Karem