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