Geçerli saati en yakın 15
dakika aralığına kadar döndürmek istiyorum.
Şu anda 6:07
ise, başlangıç zamanı olarak 6:15
okudu.Perl'de bir tarihi en yakın 15 dakikalık aralığa nasıl işlerim?
Bunu nasıl yapabilirim?
Geçerli saati en yakın 15
dakika aralığına kadar döndürmek istiyorum.
Şu anda 6:07
ise, başlangıç zamanı olarak 6:15
okudu.Perl'de bir tarihi en yakın 15 dakikalık aralığa nasıl işlerim?
Bunu nasıl yapabilirim?
Sen saat ve dakika içine zaman bölünmüş ve daha sonra da ceil
işlevini kullanabilirsiniz: 6:07 için
use POSIX;
my ($hr,$min) = split/:/,$time;
my $rounded_min = ceil($min/15) * 15;
if($rounded_min == 60) {
$rounded_min = 0;
$hr++;
$hr = 0 if($hr == 24);
}
en yakın 15 dakikalık aralık 06:00, değil 6:15. En yakın 15 dakikalık aralık veya sonraki 15 dakikalık aralıkları mı istiyorsunuz?
En yakın olduğunu varsayarsak, bunun gibi bir şey yapar.
#!/usr/bin/perl
use strict;
use warnings;
use constant FIFTEEN => (15 * 60);
my $now = time;
if (my $diff = $now % FIFTEEN) {
if ($diff < FIFTEEN/2) {
$now -= $diff;
} else {
$now += (15*60) - $diff;
}
}
print scalar localtime $now, "\n";
kolay bir çözüm CPAN Math::Round kullanmaktır.
use strict;
use warnings;
use 5.010;
use Math::Round qw(nearest);
my $current_quarter = nearest(15*60, time());
say scalar localtime($current_quarter);
Tavan ve POSIX yerine sprintf kullanarak ilk cevapta küçük değişiklikler. Ayrıca herhangi bir ek CPAN modülü kullanmaz. Bu yukarı ya da aşağı yuvarlar yani 6:07 = 6:00, 6:08 = 6:15, 6:22 = 6:15 ve 6:23 = 6:30. Eğer yuvarlanmış dakikalar 60'a eşit ise bir saatin eklendiğini unutmayın. Ancak bunu doğru yapmak için, saati eklemek için bir zaman çizelgesi ve yerel saat işlevleri kullanmanız gerekir. Yani, bir saat ekleyerek bir gün, ay veya yıl ekleyebilir.
#!/usr/bin/perl
my ($hr,$min) = split/:/,$time;
my $interimval = ($min/15);
my $rounded_min = sprintf "%.0f", $interimval;
$rounded_min = $rounded_min * 15;
if($rounded_min == 60)
{
$rounded_min = 0;
$hr++;
$hr = 0 if($hr == 24);
}
düzgün, ancak 12:58 Øyvind Skaar @ 12:60 ve 13:00 :-( –
olacak: işaret için teşekkürler şimdi Sabit – codaddict