Субтракт 15 минут от времени с использованием Perl - PullRequest
6 голосов
/ 13 июля 2011

Я думал, что это будет очень просто, но сейчас у меня действительно нет выбора. Я хочу вычесть 15 минут из данного времени.

Пример Мое время 15:04 Я хочу вычесть 15 минут, чтобы быть 14:49. Я искал решения в интернете, но не существует Perl-модуля, который бы мне помог.

Ответы [ 6 ]

20 голосов
/ 13 июля 2011

Вы можете использовать DateTime:

my $dt = DateTime->new(
    year   => 1,
    month  => 1,
    day    => 1,
    hour   => 15, 
    minute => 4,
);  

$dt->subtract(minutes => 15);
printf "%d:%d\n", $dt->hour, $dt->minute; # prints 14:49
7 голосов
/ 13 июля 2011

Ну, все зависит от того, как хранится ваше время. Я предпочитаю использовать time_t как возвращено встроенным time.

my $now = time();
my $before1 = $now - (15*60);      # 15 minutes ago
my $before2 = $now - (3*60*60);    # 3 hours ago
my $before3 = $now - (2*24*60*60); # 2 days ago

Для вывода я использую модуль POSIX

print POSIX::strftime( '%Y-%m-%d %T', localtime($before1) );
2 голосов
/ 13 июля 2011
perl -MClass::Date -e 'my $d=Class::Date->new("2011-07-13 15:04:00"); my $d2 = $d-"15m"; print $d2, "\n";'

Выход:

2011-07-13 14: 49: 00

1 голос
/ 13 июля 2011

преобразовать время в unix, например, текущее время: $unixtime = time();, затем вычесть из него 15 * 60, затем преобразовать в красивую строку с чем-то вроде

sub display_time {
  my ($sec,$min,$hour,$mday,$mon,$year,undef,undef,undef) = localtime(time);
  $year += 1900;
  $mon += 1;
  return "$year.".sprintf("%02d.%02d %02d:%02d:%02d",$mon,$mday,$hour,$min,$sec);
}
1 голос
/ 13 июля 2011

Попробуйте использовать Дата :: Calc

use Date::Calc qw(Add_Delta_DHMS); 

($year2, $month2, $day2, $h2, $m2, $s2) = 
Add_Delta_DHMS( $year, $month, $day, $hour, $minute, $second, $days_offset, $hour_offset, $minute_offset, $second_offset );

($y,$m,$d,$H,$M,$S) = Add_Delta_DHMS(Today_and_Now(), 0, 0, -15, 0);
0 голосов
/ 20 мая 2016

Вы можете использовать следующую подпрограмму, если вас интересует только время, а не дата:

sub subTime{
    my ($time) = @_;
    my @splittime = split(':', $time);
    my $hour = $splittime[0];
    my $min = $splittime[1];
    if($min < 15){
        $min=($min+60)-15; 
        $hour-=1;
    }
    else{
        $min = $min-15;
    } 
    return "$hour:$min";
} 

Disclamer: Это решение, которое использовал ОП, он упомянул об этом в комментариях в ответе выше (в ответе @ eugene).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...