Skip to content
This repository
tag: v277
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 117 lines (91 sloc) 3.687 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
(*
Copyright © 2011 MLstate

This file is part of OPA.

OPA is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.

OPA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.

You should have received a copy of the GNU Affero General Public License
along with OPA. If not, see <http://www.gnu.org/licenses/>.
*)
type t = int

(* FIXME, proper type for Time.tm *)
type tm = Unix.tm

let of_unix_time t = int_of_float (t *. 1000.)
let to_unix_time t = float_of_int t /. 1000.
let fmi = float_of_int max_int
let of_unix_time_inf t = let t1000 = t *. 1000.0 in if t1000 >= fmi then max_int else int_of_float t1000

let now () = of_unix_time (Unix.gettimeofday ())
let infinity = max_int

let process_utime () = of_unix_time (Unix.times ()).Unix.tms_utime
let process_stime () = of_unix_time (Unix.times ()).Unix.tms_stime
let process_cutime () = of_unix_time (Unix.times ()).Unix.tms_cutime
let process_cstime () = of_unix_time (Unix.times ()).Unix.tms_cstime

let sleep = Unix.sleep

let gmtime t = Unix.gmtime (to_unix_time t)
let localtime t = Unix.localtime (to_unix_time t)

(*let gmt_usec time = time mod 1000000 *)
let gmt_msec time = (abs time) mod 1000
let gmt_sec time = (gmtime time).Unix.tm_sec
let gmt_min time = (gmtime time).Unix.tm_min
let gmt_hour time = (gmtime time).Unix.tm_hour
let gmt_mday time = (gmtime time).Unix.tm_mday
let gmt_mon time = (gmtime time).Unix.tm_mon
let gmt_year time = (gmtime time).Unix.tm_year + 1900
let gmt_wday time = (gmtime time).Unix.tm_wday
let gmt_yday time = (gmtime time).Unix.tm_yday
let gmt_isdst time = (gmtime time).Unix.tm_isdst

(*let local_usec time = (time * 1000000) mod 1000000*)
let local_msec time = (abs time) mod 1000
let local_sec time = (localtime time).Unix.tm_sec
let local_min time = (localtime time).Unix.tm_min
let local_hour time = (localtime time).Unix.tm_hour
let local_mday time = (localtime time).Unix.tm_mday
let local_mon time = (localtime time).Unix.tm_mon
let local_year time = (localtime time).Unix.tm_year + 1900
let local_wday time = (localtime time).Unix.tm_wday
let local_yday time = (localtime time).Unix.tm_yday
let local_isdst time = (localtime time).Unix.tm_isdst

let mktime ~year ~month ~day ~h ~min ~sec ~ms =
  let res =
    of_unix_time (
      fst (
        Unix.mktime {
          Unix.tm_sec = sec ;
          Unix.tm_min = min ;
          Unix.tm_hour = h ;
          Unix.tm_mday = day ;
          Unix.tm_mon = month ;
          Unix.tm_year = year - 1900 ;
          Unix.tm_wday = 0 ;
          Unix.tm_yday = 0 ;
          Unix.tm_isdst = false
        }
      )
    )
  in
  if res < 0 then res - ms else res + ms

let bound = Chrono.bound

let zero = 0

let is_positive t = t > 0
let is_infinite t = t = infinity

let is_after t1 t2 = t1 > t2
let is_before t1 t2 = t1 < t2

let add t1 t2 = if t1 = infinity || t2 = infinity then infinity else t1 + t2

let milliseconds v = v
let seconds v = milliseconds (v * 1000)
let seconds_float = of_unix_time
let minutes v = seconds (v * 60)
let hours v = minutes (v * 60)
let days v = hours (v * 24)

let in_seconds t =
  float_of_int t /. 1000.

let in_milliseconds t = t

let round_to_sec t = t - (t mod 1000)

let difference t1 t2 = if t1 = infinity then zero else if t2 = infinity then infinity else t2 - t1

let max = Pervasives.max
let min = Pervasives.min

let get_accurate_time = Unix.gettimeofday
Something went wrong with that request. Please try again.