Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: reinkor <reinkor@xxxxxxxxx>
- Date: Mon, 30 Mar 2009 05:37:25 -0700 (PDT)
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
.
- Follow-Ups:
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: Jeffrey R. Carter
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: John B. Matthews
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- References:
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: sjw
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: tmoran
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: sjw
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: reinkor
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- From: Jeffrey R. Carter
- Re: Newbie Q: How to program in UTC (time/calendar) ?
- Prev by Date: Re: Newbie Q: How to program in UTC (time/calendar) ?
- Next by Date: Re: Build gcc-ada on/for Solaris x86_64?
- Previous by thread: Re: Newbie Q: How to program in UTC (time/calendar) ?
- Next by thread: Re: Newbie Q: How to program in UTC (time/calendar) ?
- Index(es):
Relevant Pages
|