日付範囲(2つのUNIXタイムスタンプ)があり、23:59:59にポイントを見つける必要があります。 どのように私はPerlでそれをすることができますか?2つのUNIXタイムスタンプの間に1日の変更ポイントを取得
P.S.私は非常に大きな範囲を持つことができるので、()は良い考えではないと思います。何か他の変種?
日付範囲(2つのUNIXタイムスタンプ)があり、23:59:59にポイントを見つける必要があります。 どのように私はPerlでそれをすることができますか?2つのUNIXタイムスタンプの間に1日の変更ポイントを取得
P.S.私は非常に大きな範囲を持つことができるので、()は良い考えではないと思います。何か他の変種?
私はDate::Calc
を使用します。あなたの2つのタイムスタンプが$ts1
と$ts2
に位置していると仮定します
use Date::Calc qw(Time_to_Date Date_to_Time Delta_Days Add_Delta_Days);
my @date1 = (Time_to_Date($ts1))[0..2];
my @date2 = (Time_to_Date($ts2))[0..2];
my @midnights;
for (my $i = 0; $i < Delta_Days(@date1, @date2); ++$i) {
push @midnights, Date_to_Time(Add_Delta_Days(@date1, $i), 23, 59, 59);
}
@midnights
は今、二つの与えられたタイムスタンプとの間のすべての23時59分59秒のポイント(複数可)のUNIXタイムスタンプ(エポック秒)が含まれています。
免責事項:もちろん、DateTime
で行うこともできます。ここで
ありがとう、それは私が必要なものです! – VeroLom
使用DateTime;
これは一般的なアルゴリズムです。 Xは、最初の変更日付を取得します)Yは、最後の1
1である第一のタイムスタンプで、Z.
If Z > Y , there is no change.
2)
If W = Z, there is only one change date.
W 3、最後の変更の日付を取得)を取得します日付の範囲、R. 1日の範囲を考慮すると、
R = W - Z .. The number of points will be the integer of (W - Z)/D
はしかし、他のみんなと同じように、私が使用してことをお勧めUNIXタイムスタンプ(学校は、このような長い時間前にある...)
while (entry) {
if ((timestamp-1) % 86400 == 0) {
#match
} else {
#nomatch
}
}
の私の半最近の知見に基づいて、私は一緒に廃棄例です私の例ではうるう秒を考慮していないので、POSIXに準拠しているかどうかは疑問です。詳細情報here。
エポック秒を意味しますか? – DVK