leap seconds and the stdc library


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users leap seconds and the stdc library
# 1  
Old 12-28-2005
leap seconds and the stdc library

I understand the NTP protocol, so keeping system time updated is not a problem.

Standard C library routines like localtime() take a number of UTC seconds elapsed since the start of the epoch (Jan 1, 1970). These times in seconds can be a filetime, system time, or some other time in the past or the future.

In order to translate the seconds into years, months, days, etc. correctly the routines have to know about leap seconds. Including the one coming up this Dec 31, there are 23 leap seconds since 1970.

How is this accomplished? -- knowing about newly hatched leap seconds?
BTW HPUX 11.00 C runtine does not do this correction.... VAX C did.

Code:
/* leapsecond.c */
#include <time.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	time_t when=strtoul(argv[1],(char **)0,10);
	struct tm *tmptr=gmtime(&when);
	
	printf("%s\n",asctime(tmptr));
	return 0;
}

gives this result:
kcsdev:/home/jmcnama> leapsecond 0
Thu Jan  1 00:00:00 1970

kcsdev:/home/jmcnama> leapsecond `echo "365*2*86400"|bc`
Sat Jan  1 00:00:00 1972

kcsdev:/home/jmcnama> leapsecond `echo "365*3*86400"|bc`
Sun Dec 31 00:00:00 1972

kcsdev:/home/jmcnama> leapsecond `echo "(365*3*86400)+86400"|bc`
Mon Jan  1 00:00:00 1973

There were two leap seconds in 1972, the translation does not take leap seconds into account.
# 2  
Old 12-28-2005
No record of leap seconds is kept. So each time a leap second occurs, calculation of past timestamps becomes wrong by one more second. In the unix view of time, there are no leap seconds. Instead of a leap second, an occasional second is twice as long as other seconds. But this means that you can precalculate, for example, the number of seconds in a year. A system that adheres strictly to the leap second paradigm cannot do that since leap seconds cannot be predicted by more than 6 months. Posix discussed leap seconds at length and decided on this approach. The deciding factor was the need to precalculate future timestamps. Another consideration was that non-networked unix systems may not have access to a leap second knowledgable clock.
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. Solaris

Leap second for year 2015

I hear the Leap second for 2015 will occur on June 30 at 23:59:60 according to the wild rumours from internet the expected impact ranges from crashing to hanging servers. Can anybody share their preparations what they have done for solaris servers? are there any patches to install or workaround?... (1 Reply)
Discussion started by: sparcguy
1 Replies

2. Fedora

Leap second happening

Have anybody heard about the Leap second problem Leap second :A leap second is a one-second adjustment that is occasionally applied to Coordinated Universal Time (UTC) in order to keep its time of day close to the mean solar time. How could i avoid such thing in my script which i deal with... (6 Replies)
Discussion started by: wnaguib
6 Replies

3. Shell Programming and Scripting

unix korn shell leap years problem

Write a function called dateToDays that takes three parameters -a month string such as Sep, a day number such as 18, and a year number such as 1962-and return s the number of days from January 1, 1900, to the date. Notes: I am asking you to account for leap years. my script is not... (0 Replies)
Discussion started by: babuda0059
0 Replies

4. UNIX for Dummies Questions & Answers

Number of leap seconds

Is there a function call in std library or unit command that returns the number of current leap seconds? GG (4 Replies)
Discussion started by: NAVTime
4 Replies

5. UNIX for Dummies Questions & Answers

Leap year K-shell script

I need a k-shell script that tests for leap-year. Does anyone have one at hand, need ASAP!!! (2 Replies)
Discussion started by: p1jls02
2 Replies

6. HP-UX

Leap Second

Hi All, We are running the HP-UX 11.11 and Linux AS 3.0. so, shall we need to make any changes for leap second i.e. insert the leap second on 1st Jan 2006 or does the system have some setup which would take care of this automatically. Please advise. Regards, Inder (1 Reply)
Discussion started by: isingh786
1 Replies

7. UNIX for Advanced & Expert Users

Insertion of Leap Second

Hi All, We are running the HP-UX 11.11 and Linux AS 3.0. so, shall we need to make any changes for leap second i.e. insert the leap second on 1st Jan 2006 or does the system have some setup which would take care of this automatically. Please advise. Regards, Inder (2 Replies)
Discussion started by: isingh786
2 Replies
Login or Register to Ask a Question