How do I convert a date/time to epoch time (unix time/seconds since 1970) in Perl?

前端 未结 13 2157
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-03 04:20

Given a date/time as an array of (year, month, day, hour, minute, second), how would you convert it to epoch time, i.e., the number of seconds since 1970-01-01 00:00:00 GMT?

13条回答
  •  一整个雨季
    2020-12-03 04:47

    I'm using a very old O/S that I don't dare install libraries onto, so here's what I use;

    %MonthMatrix=("Jan",0,"Feb",31,"Mar",59,"Apr",90,"May",120,"Jun",151,"Jul",181,"Aug",212,"Sep",243,"Oct",273,"Nov",304,"Dec",334);
    $LeapYearCount=int($YearFourDigits/4);
    $EpochDayNumber=$MonthMatrix{$MonthThreeLetters};
    if ($LeapYearCount==($YearFourDigits/4)) { if ($EpochDayNumber<32) { $EpochDayNumber--; }}
    $EpochDayNumber=($YearFourDigits-1970)*365+$LeapYearCount+$EpochDayNumber+$DayAsNumber-493;
    $TimeOfDaySeconds=($HourAsNumber*3600)+($MinutesAsNumber*60)+$SecondsAsNumber;
    $ActualEpochTime=($EpochDayNumber*86400)+$TimeOfDaySeconds;
    

    The input variables are;

    $MonthThreeLetters
    $DayAsNumber
    $YearFourDigits
    $HourAsNumber
    $MinutesAsNumber
    $SecondsAsNumber
    

    ...which should be self-explanatory.

    The input variables, of course, assume GMT (UTC). The output variable is "$ActualEpochTime". (Often, I only need $EpochDayNumber, so that's why that otherwise superfluous variable sits on its own.)

    I've used this formula for years with nary an error.

提交回复
热议问题