X-Git-Url: http://git.annexia.org/?p=virt-top.git;a=blobdiff_plain;f=virt-top%2Fvirt_top_calendar2.ml;h=cc82eec734e59ec8532b67c9a35ed2041351ef15;hp=dd00c79fba6e0ab65d20a32224d60c601d06ebf2;hb=7a798f0798414ae24ba9ffe839e95f9a2dd3f2a5;hpb=627e6f64b0cd359a8f03d45ab093592f000cf6e6 diff --git a/virt-top/virt_top_calendar2.ml b/virt-top/virt_top_calendar2.ml index dd00c79..cc82eec 100755 --- a/virt-top/virt_top_calendar2.ml +++ b/virt-top/virt_top_calendar2.ml @@ -1,5 +1,5 @@ (* '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 @@ -22,7 +22,9 @@ open CalendarLib open Printf -open ExtString ;; +open ExtString + +open Virt_top_gettext.Gettext ;; Virt_top.parse_date_time := fun time -> @@ -36,18 +38,31 @@ fun time -> 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