comp.lang.ada
 help / color / mirror / Atom feed
From: "John B. Matthews" <nospam@nospam.invalid>
Subject: Re: Newbie Q: How to program in UTC (time/calendar) ?
Date: Mon, 30 Mar 2009 09:45:18 -0400
Date: 2009-03-30T09:45:18-04:00	[thread overview]
Message-ID: <nospam-9B401E.09451830032009@web.aioe.org> (raw)
In-Reply-To: 8aad6593-efb8-441f-9eac-27cf2fe7a124@v38g2000yqb.googlegroups.com

In article 
<8aad6593-efb8-441f-9eac-27cf2fe7a124@v38g2000yqb.googlegroups.com>,
 reinkor <reinkor@gmail.com> wrote:

> 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) ?

Time1 uses Ada.Calendar.Formatting.Value, with a default Time_Zone of 0. 
In contrast, Time2 is the result ofAda.Calendar.Time_Of, which is local 
time. I'm guessing you're on Summer (Daylight) time, now; but back on 
New Year's day of 1970, you were on standard time.

Here is an example that highlights some of the differences:

with Ada.Calendar; use Ada.Calendar;
with Ada.Calendar.Formatting;
with Ada.Calendar.Time_Zones;
   use type Ada.Calendar.Time_Zones.Time_Offset;
with Ada.Text_IO; use Ada.Text_IO;

procedure Times is

   T : Time := Clock;
   D : Time_Zones.Time_Offset;

begin

   D := Time_Zones.UTC_Time_Offset(T);
   Put("UTC_Time_Offset: "); Put(D'Img); New_Line;
   Put("GMT:   "); Put(Formatting.Image(T)); New_Line;
   Put("Local: "); Put(Formatting.Image(T, False, D)); New_Line;
   Put_Line("--");
   
   T := Time_Of(1970, 1, 1, 0.0);
   Put(Formatting.Image(T)); New_Line;
   Put(Formatting.Image(T, False, -300)); New_Line;
   Put_Line("--");
   
   T := Formatting.Time_Of(1970, 1, 1, 0.0);
   Put(Formatting.Image(T)); New_Line;
   Put(Formatting.Image(T, False, -300)); New_Line;
   Put(Formatting.Image(T, False, +60)); New_Line;

end times;

Here's what I see in a New York time zone:

./times
UTC_Time_Offset: -240
GMT:   2009-03-30 13:43:26
Local: 2009-03-30 09:43:26
--
1970-01-01 05:00:00
1970-01-01 00:00:00
--
1970-01-01 00:00:00
1969-12-31 19:00:00
1970-01-01 01:00:00

> I here fight with my intuition :-)

You may want to use the "use" clause a little more sparingly

-- 
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>



  reply	other threads:[~2009-03-30 13:45 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-24  8:51 Newbie Q: How to program in UTC (time/calendar) ? reinkor
2009-03-24  9:18 ` Dmitry A. Kazakov
2009-03-24 10:07 ` Martin
2009-03-24 10:55   ` reinkor
2009-03-24 12:49     ` Martin
2009-03-24 18:53       ` Dirk Heinrichs
2009-03-24 23:59         ` Martin
2009-03-25 10:21           ` reinkor
2009-03-25 15:28             ` tmoran
2009-03-25 21:55               ` sjw
2009-03-26  1:38                 ` tmoran
2009-03-26 20:58                   ` sjw
2009-03-27 12:52                     ` reinkor
2009-03-27 16:58                       ` Jeffrey R. Carter
2009-03-30 11:27                         ` reinkor
2009-03-30 16:47                           ` Jeffrey R. Carter
2009-03-30 12:37                         ` reinkor
2009-03-30 13:45                           ` John B. Matthews [this message]
2009-03-30 16:52                           ` Jeffrey R. Carter
2009-03-30 19:34                             ` reinkor
2009-03-30 19:44                             ` reinkor
2009-04-04  2:22                     ` Brian Gaffney
2009-03-24 11:29 ` Jacob Sparre Andersen
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox