在没有date -d选项的Solaris上的Unix时间+ n天

时间:2018-04-16 20:34:27

标签: perl date unix solaris

我正在寻找一种方法来返回日期加上(或减去)n天。我们的Solaris 10系统没有日期的-d选项,甚至没有/ usr / xpg4 / bin / date。

我考虑过perl,在另一个线程上找到了几个例子,但系统不包括

use Time::ParseDate;
use Time::CTime;

,也不

use DateTime;
use DateTime::Format::Strptime;

我们的系统受到严格管制,因此我不能指望安装任何尚未安装的实用程序或库。

欢迎任何其他建议。

3 个答案:

答案 0 :(得分:2)

不完全确定你想要什么。

可能会有所帮助的一些例子:

perl -e'$days=shift; print "".localtime(time + $days*24*3600)' 3      #in 3 days
Thu Apr 19 23:13:53 2018

perl -e'$days=shift; print "".localtime(time + $days*24*3600)' -- -7  #a week ago
Mon Apr  9 23:14:16 2018

chmod +x date_formatted.pl
cat date_formatted.pl
#!/usr/bin/perl
for(@ARGV){
  my @lt=localtime( time() + $_*24*3600 );
  printf "%04d-%02d-%02dT%02d:%02d:%02d\n",
    $lt[5]+1900,
    $lt[4]+1,
    @lt[3,2,1,0];
}

./date_formatted.pl -2
2018-04-14T23:25:21

./date_formatted.pl 3
2018-04-19T23:25:21

./date_formatted.pl 0.5
2018-04-17T11:25:21

./date_formatted.pl -1 0 1
2018-04-15T23:25:21
2018-04-16T23:25:21
2018-04-17T23:25:21

如果您被允许,请安装Date::Manip并查看http://search.cpan.org/~sbeck/Date-Manip-6.70/lib/Date/Manip/Examples.pod#TO_ADD_AN_AMOUNT_OF_TIME_TO_A_DATE

答案 1 :(得分:2)

perl -e 'use strict;use warnings;use POSIX; my $date_folder_to_be_deleted=strftime "%Y-%m-%d",localtime(time() - 24*60*60); print "$date_folder_to_be_deleted"'

希望这是有效的,如果是,你可以使用for循环通过将循环变量乘以24 * 60 * 60 * n来获得不同的日期

答案 2 :(得分:1)

自perl v5.10起,Perl的Time::Piece模块已成为核心发行版的一部分

您没有说明日期的格式,但这会以格式YYYY-MM-DD

生成提前一天的日期
perl -MTime::Piece -E 'say((gmtime()+24*60*60)->ymd)'

输出

2018-04-17