UnixTime.ob07 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. (*
  2. BSD 2-Clause License
  3. Copyright (c) 2018-2019, Anton Krotov
  4. All rights reserved.
  5. *)
  6. MODULE UnixTime;
  7. VAR
  8. days: ARRAY 12, 31, 2 OF INTEGER;
  9. PROCEDURE init;
  10. VAR
  11. i, j, k, n0, n1: INTEGER;
  12. BEGIN
  13. FOR i := 0 TO 11 DO
  14. FOR j := 0 TO 30 DO
  15. days[i, j, 0] := 0;
  16. days[i, j, 1] := 0;
  17. END
  18. END;
  19. days[ 1, 28, 0] := -1;
  20. FOR k := 0 TO 1 DO
  21. days[ 1, 29, k] := -1;
  22. days[ 1, 30, k] := -1;
  23. days[ 3, 30, k] := -1;
  24. days[ 5, 30, k] := -1;
  25. days[ 8, 30, k] := -1;
  26. days[10, 30, k] := -1;
  27. END;
  28. n0 := 0;
  29. n1 := 0;
  30. FOR i := 0 TO 11 DO
  31. FOR j := 0 TO 30 DO
  32. IF days[i, j, 0] = 0 THEN
  33. days[i, j, 0] := n0;
  34. INC(n0)
  35. END;
  36. IF days[i, j, 1] = 0 THEN
  37. days[i, j, 1] := n1;
  38. INC(n1)
  39. END
  40. END
  41. END
  42. END init;
  43. PROCEDURE time* (year, month, day, hour, min, sec: INTEGER): INTEGER;
  44. RETURN ((year - 1970) * 365 + days[month - 1, day - 1, ORD(year DIV 4 = 0)] + (year - 1969) DIV 4) * 86400 + hour * 3600 + min * 60 + sec
  45. END time;
  46. BEGIN
  47. init
  48. END UnixTime.