Sponsored Content
Top Forums UNIX for Advanced & Expert Users leap seconds and the stdc library Post 94268 by jim mcnamara on Wednesday 28th of December 2005 02:50:01 PM
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.
 

7 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

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. 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

6. 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

7. 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
TIME(2) 						     Linux Programmer's Manual							   TIME(2)

NAME
time - get time in seconds SYNOPSIS
#include <time.h> time_t time(time_t *t); DESCRIPTION
time() returns the time as the number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). If t is non-NULL, the return value is also stored in the memory pointed to by t. RETURN VALUE
On success, the value of time in seconds since the Epoch is returned. On error, ((time_t) -1) is returned, and errno is set appropriately. ERRORS
EFAULT t points outside your accessible address space. CONFORMING TO
SVr4, 4.3BSD, C89, C99, POSIX.1-2001. POSIX does not specify any error conditions. NOTES
POSIX.1 defines seconds since the Epoch as a value to be interpreted as the number of seconds between a specified time and the Epoch, according to a formula for conversion from UTC equivalent to conversion on the naive basis that leap seconds are ignored and all years divisible by 4 are leap years. This value is not the same as the actual number of seconds between the time and the Epoch, because of leap seconds and because clocks are not required to be synchronized to a standard reference. The intention is that the interpretation of sec- onds since the Epoch values be consistent; see POSIX.1 Annex B 2.2.2 for further rationale. SEE ALSO
date(1), gettimeofday(2), ctime(3), ftime(3), time(7) COLOPHON
This page is part of release 3.25 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. Linux 2010-02-25 TIME(2)
All times are GMT -4. The time now is 01:21 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy