let time_of_ts_date_auto (doc_settings : t_doc_settings) (date : ts_date_auto) : t_time option =
match date with
|Cs_date_auto -> try
let time : float = Unix.time () in
let local_time : Unix.tm = Unix.localtime time in
let year_int : int = local_time.tm_year + 1900 in
let month_int : int = local_time.tm_mon + 1 in
let day_int : int = local_time.tm_mday in
let hour_int : int = local_time.tm_hour in
let minute_int : int = local_time.tm_min in
let second_int : int = local_time.tm_sec in
let time_ref : float = float_of_int (12 * 60 * 60) in
let local_time_ref : Unix.tm = Unix.localtime time_ref in
let local_minutes_ref : int = (local_time_ref.tm_hour * 60) + local_time_ref.tm_min in
let gm_time_ref : Unix.tm = Unix.gmtime time_ref in
let gm_minutes_ref : int = (gm_time_ref.tm_hour * 60) + gm_time_ref.tm_min in
let diff_minutes : int = local_minutes_ref + (60 * (Bool.to_int local_time.tm_isdst)) - gm_minutes_ref in
let sign : string = if diff_minutes < 0 then "-" else "+" in
let diff_minute : int = abs diff_minutes mod 60 in
let diff_hour : int = (abs diff_minutes - diff_minute) / 60 in
Some
{
year = year_int;
month = month_int;
day = day_int;
hour = hour_int;
minute = minute_int;
second = second_int;
timezone = (sign, diff_hour, diff_minute);
}
with
|_ -> let _ : unit = IO.print_warning "WARNING: cannot get system time and date." in None