# Golang : How to determine if a year is leap year?

Tags :

A leap year is a year with 366 days instead of 365 days. The algorithm to calculate if a year is a leap can be summarized like :

`````` if year is divisible by 400 then
is_leap_year
else if year is divisible by 100 then
not_leap_year
else if year is divisible by 4 then
is_leap_year
else
not_leap_year
``````

However, we are not going to implement this algorithm, but rather get the number of days in a given year and determine if that particular year is a leap year or not.

Here you go!

`````` package main

import (
"fmt"
"time"
)

func IsLeapYear(y int) bool {

//Thirty days hath September,
//April, June and November;
//February has twenty eight alone
//All the rest have thirty-one
//Except in Leap Year, that's the time
//When February's Days are twenty-nine

// convert int to Time - use the last day of the year, which is 31st December
year := time.Date(y, time.December, 31, 0, 0, 0, 0, time.Local)
days := year.YearDay()

if days > 365 {
return true
} else {
return false
}
}

func main() {

fmt.Println("1998 is leap year? ", IsLeapYear(1998))
fmt.Println("1997 is leap year? ", IsLeapYear(1997))
fmt.Println("1996 is leap year? ", IsLeapYear(1996))
fmt.Println("1995 is leap year? ", IsLeapYear(1995))
}
``````

Output :

1998 is leap year? false

1997 is leap year? false

1996 is leap year? true

1995 is leap year? false

References :

http://golang.org/pkg/time/#Time.YearDay

http://en.wikipedia.org/wiki/Leap_year

Tags :