Sponsored Content
Top Forums Programming TZ, localtime and strftime problem on AIX and Solaris Post 302799391 by biju64 on Friday 26th of April 2013 12:03:39 PM
Old 04-26-2013
TZ, localtime and strftime problem on AIX and Solaris

Hello all,
I have the following code that seems to be misbehaving depending on the timezone setting (TZ Environment variable). It gives the correct value when TZ is in POSIX format and the wrong value when in OLSON format.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
int main()
{
    long secs;
    char timeString[20];
    struct tm timeHolder;
    for(secs=0; secs < 3610; secs++)
    {
        localtime_r((const time_t *) &secs, (struct tm *) &timeHolder);
        memset( timeString, 0, sizeof( timeString));
        strftime( timeString, sizeof( timeString), "%H:%M:%S\0", &timeHolder);
        printf("Secs: %d\t\t\tTime: %s\n", secs, timeString);
    }
}

I compile and link this as follows:

gcc -o timeprob.exe timeprob.c

The run below is on AIX 6.1 (oslevel -r gives 6100-05). Same happens on Solaris 10.

date
Fri Apr 26 16:44:25 BST 2013

date -u
Fri Apr 26 15:44:38 GMT 2013

So currently we are 1 hour ahead of GMT with Daylight Savings in operation.

1] First with POSIX format TZ:

echo $TZ
GMT0BST,M3.5.0,M10.5.0

./timeprob.exe
<snip>
Secs: 3599 Time: 00:59:59
Secs: 3600 Time: 01:00:00
Secs: 3601 Time: 01:00:01
<snip>

ie. at 3600 secs from epoch the time shows correctly as 1 hour from epoch.

2] Next with OLSON format TZ:

echo $TZ
Europe/London

./timeprob.exe
<snip>
Secs: 3599 Time: 01:59:59
Secs: 3600 Time: 02:00:00
Secs: 3601 Time: 02:00:01
<snip>



ie. at 3600 secs from epoch the time shows wrongly as 2 hours from epoch.
  • 'date' from Unix prompt shows the date correctly with/without DST.
  • When there is no DST both format work correctly.
Any idea what the problem could be? I would expect both POSIX and OLSON formats should give the same output ie. either both should say 1 hour from epoch or both should say 2 hours from epoch.
The libc.a function used is that which comes with AIX 6.1.

Any help appreciated.

Regards

Last edited by biju64; 04-26-2013 at 02:05 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl + localtime()

ok here is a perl date question not asked befor. i know i am feeling small for not knowing. BUT!!!! $ENV{TZ}="US/Central"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(); how can i do the addition to year so i can get the current year w/o going $ntime=$year+1900;... (3 Replies)
Discussion started by: Optimus_P
3 Replies

2. UNIX for Advanced & Expert Users

converting localtime to unixtime

hi, how to convert the localtime to unixtime? i have date from the date command in unix i want to convert it into unixtime thnx (2 Replies)
Discussion started by: AshishK
2 Replies

3. Solaris

AIX & Solaris 10 problem

I have this command in my script and it's working fine with AIX: ls init?*.ora 2>/dev/null | egrep -i -e "" the same command is failing in Solaris 10. does anyone have better idea how to make it work for both ? Thanks (1 Reply)
Discussion started by: talashil
1 Replies

4. Shell Programming and Scripting

gawk and strftime()

Strange behaviour of the strftime() function from gawk (3.1.5): $ awk 'BEGIN{print strftime("%T", 3600)}' > 02:00:00 $ awk 'BEGIN{print strftime("%T", 0)}' > 01:00:00 Obviously something with DST but I can not figure out why? To me 3600 epoch seconds remains 01:00, DST or not. From... (2 Replies)
Discussion started by: ripat
2 Replies

5. Shell Programming and Scripting

PERL localtime Warning

Hello All, I am facing a warning "Argument "" isn't numeric in localtime at" what i m using is below my $timestamp = Timestamp(time); go_log("###############$timestamp###############"); can some one please suggest the way to avoid this message :confused: (6 Replies)
Discussion started by: NIMISH AGARWAL
6 Replies

6. Shell Programming and Scripting

date with perl localtime

Hi Experts, I know how to handle normal date changes in perl. Most of my requirement are full filled with following: $date1 = strftime "%Y%m%d",localtime; $date2 = strftime "%Y%m%d",localtime(time -24 * 60 * 60); $date3 = strftime "%Y%m%d",localtime(time +24 * 60 * 60); $date4 = strftime... (4 Replies)
Discussion started by: mtomar
4 Replies

7. Programming

strftime equivalent in c++

HI, i wish to convert a millsec value to a readable string format. the one option is to use strftime. However this is a bit costly (1-5 micros). is there a a faster way to do so with just string manipulation (Note i have the date object which has the time details but wish o avoid strftime) (2 Replies)
Discussion started by: wojtyla
2 Replies

8. Shell Programming and Scripting

Perl help LocalTime in New Format

Hi, I'm new to perl scripting and am trying it out. I have a file written in the following format: myfile-MMDDYY where MM is the number of the Month; DD the Day and YY the last two of the year... (Apologies for dumbing this down; I'm trying to be clear). There is a new file put onto my... (2 Replies)
Discussion started by: Astrocloud
2 Replies

9. Shell Programming and Scripting

How to use a variable in perl localtime()?

Hi all, a=$1 ## b=`echo "86400 * $a"|bc` `perl -e 'use POSIX qw(strftime);$now_string = strftime "%d/%m/%Y", localtime(time-$b); print $now_string,"\n";' > date_file` but im always getting current date; can any one suggest me any the improvement the above works fine if i use some thing... (2 Replies)
Discussion started by: zozoo
2 Replies

10. Shell Programming and Scripting

Help on awk strftime

cat file 41285.000034722223 41285.000567129631 41285.000069444446 41285.001122685186 41285.000092592592 41285.001620370371 41285.000138888892 41285.00340277778 41285.000185185185 41285.000405092593 41285.000196759262 41285.000856481478 41285.000208333331 41285.000717592593... (5 Replies)
Discussion started by: phpshell
5 Replies
PMLOCALTIME(3)						     Library Functions Manual						    PMLOCALTIME(3)

NAME
pmLocaltime - convert the date and time for a reporting timezone C SYNOPSIS
#include <time.h> #include <pcp/pmapi.h> struct tm *pmLocaltime(const time_t *clock, struct tm *result); cc ... -lpcp DESCRIPTION
pmLocaltime is very similar to localtime(3), except the timezone used is the current ``reporting timezone'' (rather than the default TZ environment variable scheme), and the result is returned into a caller-declared buffer (rather than a private buffer). Like localtime(3) the time to be converted is passed via clock, and the result contains the components broken out in the elements of the tm struct. pmLocaltime returns result as the value of the function. The default current reporting timezone is as defined by the TZ environment variable, so pmLocaltime and localtime(3) will initially produce a similar encoding of the date and time. Use pmNewZone(3), pmNewContextZone(3) or pmUseZone(3) to establish a new current reporting timezone that will affect pmLocaltime but not localtime(3). SEE ALSO
localtime(3), PMAPI(3), pmCtime(3), pmGetConfig(3), pmNewContextZone(3), pmNewZone(3), pmUseZone(3), pcp.conf(5) and pcp.env(5). Performance Co-Pilot PCP PMLOCALTIME(3)
All times are GMT -4. The time now is 08:22 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy