Re: Newbie Q: How to program in UTC (time/calendar) ?



Sorry, I now realized that this was not so intuitive for me.
Given the following (modified) code:

------------------------------------------------
with Text_IO;
use Text_IO;

with Ada.Calendar.Formatting,Ada.Calendar.Time_Zones;
use Ada.Calendar,Ada.Calendar.Formatting,Ada.Calendar.Time_Zones;

procedure t1 is

package Int_Io is new Text_IO.Integer_Io (Integer);
use Int_Io;

Time1,Time2 : Time;

begin

Time1 := Value("1970-01-01 00:00:00");
Time2 := Ada.Calendar.Time_Of(1970,1,1,0.0);

Put("Time1: ");Put(Image(Time1));New_Line;
Put("Time2: ");Put(Image(Time2));New_Line;

Put("UTC_Time_Offset: ");Put(Integer(UTC_Time_Offset),8);

end t1;
------------------------------------

This gives the following output on my computer:

Time1: 1970-01-01 00:00:00
Time2: 1969-12-31 23:00:00
UTC_Time_Offset: 120



The first line I now understand reflects that both "Value"
and "Image" has parameter Time_Zone = 0 (UTC). I.e. "Time1"
can be understood to have value 1970-01-01 00:00:00 (UTC).
"But "Time2" is 1970-01-01 00:00:00 *minus* one hour (only), and
UTC_Time_Offset = 120 (2 hours).
I would expect that it should be UTC - 2 hours
(i.e. 1969-12-31 22:00:00 and *not* 1969-12-31 23:00:00) ?

I here fight with my intuition :-)

reinert





On 27 Mar, 18:58, "Jeffrey R. Carter"
<spam.jrcarter....@xxxxxxxxxxxxxx> wrote:
reinkor wrote:
   Time1 := Value("1970-01-01 00:00:00");
   Put(Image(Time1));New_Line;
   Put(Image(Ada.Calendar.Time_Of(1970,1,1,Duration(0))));

1970-01-01 00:00:00
1969-12-31 23:00:00

The last output line here reflects the fact that Ada takes
"local time" from the computer - and the result would be
different if I wait to run my program till next Monday
(this weekend we change to summer daylight saving time).

No. It reflects the fact that Image takes an Ada.Calendar.Time_Zones.Time_Offset
parameter (Time_Zone) that defaults to 0 (UTC). Image is therefore converting
the supplied time from your computer's offset
(Ada.Calendar.Time_Zones.UTC_Time_Offset) to the default offset of 0. Your
offset seems to be 60 (GMT + 1 hr). To get the image of what you passed to it,
you must specify an offset of UTC_Time_Offset.

The 1st value comes out as expected because Value also takes an
Ada.Calendar.Time_Zones.Time_Offset parameter (Time_Zone) that defaults to 0
(UTC). It is therefore taking the supplied string, interpreting it as a time in
UTC, and converting it to the corresponding time for your computer's offset
(UTC_Time_Offset). When you pass this time to Image with the default for
Time_Zone, the conversion is then reversed as described above.

You can compare the representations provided by Image with the values obtained
by Ada.Calendar.Split to observe the conversions that the operations in
Ada.Calendar.Formatting perform.

Two comments on your code: "with Ada.Calendar.Formatting;" makes Ada,
Ada.Calendar, and Ada.Calendar.Formatting visible; there is no need to also with
Ada.Calendar.

I cannot understand why you would say "Duration (0)" when "0.0" is clearer and
shorter.

--
Jeff Carter
"My mind is a raging torrent, flooded with rivulets of
thought, cascading into a waterfall of creative alternatives."
Blazing Saddles
89

.



Relevant Pages

  • Re: Newbie Q: How to program in UTC (time/calendar) ?
    ... The last output line here reflects the fact that Ada takes ... Image is therefore converting the supplied time from your computer's offset to the default offset of 0. ... The 1st value comes out as expected because Value also takes an Ada.Calendar.Time_Zones.Time_Offset parameter that defaults to 0 (UTC). ... It is therefore taking the supplied string, interpreting it as a time in UTC, and converting it to the corresponding time for your computer's offset. ...
    (comp.lang.ada)
  • Re: Newbie Q: How to program in UTC (time/calendar) ?
    ... I thought "Offset" was reletive to UTC - not relative ... How do I best "input"/enter UTC time (so a reader of the program ... the supplied time from your computer's offset ... and converting it to the corresponding time for your computer's offset ...
    (comp.lang.ada)
  • Re: Strategies for time offsets
    ... There isn't a mechanism for a negative delta time within the quadword storage, though applications are certainly free to stuff a sign bit somewhere. ... The UTC format is often a better choice here, particularly when dealing with the storage of time values. ... And then, in the core of the program, I would simply need to do a LIB$ADD_TIMES and not have to worry about whether the offset is negative or positive. ... Barring cases where this timezone stuff is the bulk of the operation and there's nothing else around consuming more cycles or wallclock time -- I/O tends to be my go-to example here for massive overhead -- I'd tend to look to optimize this math stuff and any associated system call overhead later. ...
    (comp.os.vms)
  • Re: how to make dates without timezones?
    ... the offset from UTC is the local ... clock offset, for the other it is zero regardless of location. ... UTC methods should be faster than local methods, ...
    (comp.lang.java.programmer)
  • Re: obtaining the time offset from UTC
    ... >> I need to find out the time difference between UTC and local time. ... >> saving and always returns local time zone offset. ... >> When daylight saving is not in effect, then the offset should be +1 hour. ...
    (comp.lang.c)