Format of "__tzinfo_type tzinfo"

Heiko kzt8zyom@123mail.org
Sat Jun 7 08:55:00 GMT 2008


Hello,

I don´t have environment-variables.
In the meantime I set tzinfo in my src:

static __tzinfo_type tzinfo = {1, 0,
    { {'M', 3, 5, 0, 7200, (time_t)0, -3600 },   //CET, March, Last
    week, Sunday, 2:00 o´clock, -1 hour to UTC
      {'M', 10, 5, 0, 10800, (time_t)0, -7200 }  //CET, October, Last
      week, Sunday, 3:00 o´clock, -2 hours to UTC
    } 
};

I also wrote my own tzset().
void tzset (void)
{
  __tzinfo_type *tz = __gettzinfo();      
  __tzcalc_limits (tz->__tzyear);
  _timezone = tz->__tzrule[0].offset;  
  _daylight = tz->__tzrule[0].offset != tz->__tzrule[1].offset;
  _tzname[0] = tz->__tzrule[0].name;
  _tzname[1] = tz->__tzrule[1].name;
  os_mut_release(MUTEX_TIMEZONE); 
}

At the moment, it seems to work. 
Perhaps it will not work if I have no daylight-saving-time. (I must test
it...)

Wbr 
Heiko

On Tue, 3 Jun 2008 14:29:13 -0400, "Howland Craig D (Craig)"
<howland@LGSInnovations.com> said:
> It is not necessary to know what the members are in able to use it, as
> the
> user should be using the higher-level routines.  Read the man page for
> tzset,
> which explains how the TZ environment variable should be set.  (The
> newlib
> tzset man page does not describe it completely, but Linux does, if you
> have access to that.  Otherwise it should readily be available on the
> web.)
>  
> For example, I am in the EST/EDT zone, which changes to daylight time
> (EDT)
> on the second Sunday in March (M3.2.0), and back to standard time (EST)
> the first Sunday in November (M11.1.0).  Eastern time is 5 hours behind
> GMT, so EST5, while EDT is only 4 hours behind, so EDT4.  (The routines
> default to changing at 2AM, so my setting keeps that default.)
>  
> putenv("TZ=EST5EDT4,M3.2.0,M11.1.0");
>  
> /* Print local time, showing time zone in use */
> time_t  t=time(NULL);
> if(t != (time_t)-1)  {
>     /* Include time zone in printout (if have) */
>     char  buf[40];
>     const char  *fmt="%a %b %e %H:%M:%S %Z %Y";
>     struct tm  *tm_p;
>     tm_p = localtime(&t);
>     strftime(buf, sizeof(buf), fmt, tm_p);
>     puts(buf);
>     }
> 
> Sample output:
> Tue Jun  3 14:12:07 EDT 2008
>  
> I am not familiar with your zone, but it would be something like
> "TZ=CET-2CEST-1,M3.5.0/01:00:00,M10.5.0/01:00:00" if the CEST article on
> Wikipedia had the right information (changing at 1AM the last Sunday
> of March and the last Sunday of October, normally 2 hours ahead of GMT).
>  
> Craig
> 
> -----Original Message-----
> From: newlib-owner@sourceware.org [mailto:newlib-owner@sourceware.org] On
> Behalf Of Heiko
> Sent: Tuesday, June 03, 2008 4:31 AM
> To: newlib@sources.redhat.com
> Subject: Format of "__tzinfo_type tzinfo"
> 
> Hello,
> 
> I´ll use the time-functions from newlib.
> Can somebody explain me the meaning of the elements from "__tzinfo_type
> tzinfo" (\libc\time\gettzinfo.c)?
> 
>   typedef struct __tzrule_struct
>   {
>     char ch;
>     int m;
>     int n;
>     int d;
>     int s;
>     time_t change;
>     long offset; /* Match type of _timezone. */
>   } __tzrule_type;
> 
>   typedef struct __tzinfo_struct
>   {
>     int __tznorth;
>     int __tzyear;
>     __tzrule_type __tzrule[2];
>   } __tzinfo_type;
> 
> I need it for conversion from UTZ to CET/CEST.
> 
> Thanks and wbr
> Heiko
> 

-- 
http://www.fastmail.fm - The professional email service



More information about the Newlib mailing list