(* 'top'-like tool for libvirt domains.
- (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc.
+ (C) Copyright 2007-2009 Richard W.M. Jones, Red Hat Inc.
http://libvirt.org/
This program is free software; you can redistribute it and/or modify
Calendar.Period.make 0 0 0 hh mm ss
) else (* +seconds *)
Calendar.Period.second (int_of_string period) in
- (* Add it as an offset from the current time. *)
+ (* Add it as an offset from the current time.
+ *
+ * Note that the default for the Calendar library is to return
+ * Calendar.now in the UTC time zone, which is in fact what we
+ * need below.
+ *)
Calendar.add (Calendar.now ()) period
) else (
- if String.contains time '-' then (* YYYY-MM-DD HH:MM:SS *)
- Printer.CalendarPrinter.from_string time
- else ( (* HH:MM:SS *)
- let time = Printer.TimePrinter.from_string time in
- Calendar.create (Date.today ()) time
- )
+ let cal =
+ if String.contains time '-' then (* YYYY-MM-DD HH:MM:SS *)
+ Printer.CalendarPrinter.from_string time
+ else ( (* HH:MM:SS *)
+ let time = Printer.TimePrinter.from_string time in
+ Calendar.create (Date.today ()) time
+ ) in
+ (* Assume the user has entered a local time. Convert it to
+ * UTC time zone which is what we need below. (RHBZ#680344)
+ *)
+ Calendar.convert cal Time_Zone.Local Time_Zone.UTC
) in
- eprintf "end time: %s\n" (Printer.CalendarPrinter.to_string cal);
+ eprintf "end time (UTC): %s\n" (Printer.CalendarPrinter.to_string cal);
- (* Convert to a time_t, adjusting for the current timezone. *)
- fst (Unix.mktime (Calendar.to_unixtm cal))
+ (* Convert to a time_t. Note that we compare this against
+ * Unix.gettimeofday in the main module, so this must be returned as
+ * plain seconds from 1970 with no timezone adjustment. (RHBZ#637964)
+ *)
+ Calendar.to_unixfloat cal