(* BSD 2-Clause License Copyright (c) 2018, 2019, Anton Krotov All rights reserved. *) MODULE UNIXTIME; VAR days: ARRAY 12, 31, 2 OF INTEGER; PROCEDURE init; VAR i, j, k, n0, n1: INTEGER; BEGIN FOR i := 0 TO 11 DO FOR j := 0 TO 30 DO days[i, j, 0] := 0; days[i, j, 1] := 0; END END; days[ 1, 28, 0] := -1; FOR k := 0 TO 1 DO days[ 1, 29, k] := -1; days[ 1, 30, k] := -1; days[ 3, 30, k] := -1; days[ 5, 30, k] := -1; days[ 8, 30, k] := -1; days[10, 30, k] := -1; END; n0 := 0; n1 := 0; FOR i := 0 TO 11 DO FOR j := 0 TO 30 DO IF days[i, j, 0] = 0 THEN days[i, j, 0] := n0; INC(n0) END; IF days[i, j, 1] = 0 THEN days[i, j, 1] := n1; INC(n1) END END END END init; PROCEDURE time* (year, month, day, hour, min, sec: INTEGER): INTEGER; RETURN ((year - 1970) * 365 + days[month - 1, day - 1, ORD(year DIV 4 = 0)] + (year - 1969) DIV 4) * 86400 + hour * 3600 + min * 60 + sec END time; BEGIN init END UNIXTIME.