It it now a leap year?
Rick Stevens
rstevens at internap.com
Thu Aug 9 00:30:56 UTC 2007
On Wed, 2007-08-08 at 18:52 -0400, Andrew Parker wrote:
> On 8/8/07, Kevin J. Cummings <cummings at kjchome.homeip.net> wrote:
> > Andrew Parker wrote:
> > > On 8/8/07, Mike - EMAIL IGNORED <m_d_berger_1900 at yahoo.com> wrote:
> > >> Is there a system call or variable that will
> > >> tell me if it is now a leap year, or should I
> > >> do the arithmetic?
> > >
> > > For bash the following will display 061 if its currently a leap year,
> > > 060 otherwise
> > >
> > > date -d "$(date +%Y)/03/01" +%j
> >
> > It doesn't work with dates after 2037/03/01 ....
>
> I may be being pedantic, but the requirement was to determine if the
> *current* year was a leap year. I am willing to bet that this code
> will still work in 2038 as "date" will be using more than 31 bits by
> then.
Here's a C function that will do what you want. I've even commented
it and written it as plainly as I can:
#include <time.h>
/* Function returns 1 if this is a leap year, 0 if not */
int is_this_a_leap_year() {
time_t seconds;
struct tm *curtime;
int year;
seconds = time(NULL); /* Get current time in seconds */
curtime = localtime(seconds); /* Convert to structure */
year = curtime->tm_year; /* Grab year part */
if (year % 100 == 0) { /* Is this a century? */
if (year % 400 == 0) /* Yes, divisible by 400? */
return(1); /* Yup, it's a leap year */
else /* No, not divisible, so... */
return(0); /* ...not a leap year */
} else if (year % 4 == 0) { /* Is year divisible by 4? */
return(1); /* Yes, it's a leap year */
}
return(0); /* Not a leap year */
}
Hope that helps.
----------------------------------------------------------------------
- Rick Stevens, Principal Engineer rstevens at internap.com -
- CDN Systems, Internap, Inc. http://www.internap.com -
- -
- Working with Linux is like wrestling with a worthy opponent. -
- Working with Windows is like picking on an annoyed child with a -
- loaded handgun. -
----------------------------------------------------------------------
More information about the fedora-list
mailing list