calendar

package module
v0.0.0-...-bdfe49f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2025 License: MIT Imports: 5 Imported by: 0

README

SCM logo Exchange Calendars

Build Status Coverage GoReportCard Go Reference

Overview

calendar is a Golang package that provides exchange-specific calendar functionality. It enables you to manage market holidays, business days, early closes, and sessions defined by Market Identifier Codes (MIC) for various financial exchanges globally.

Features

  • Business Day Calculations: Check if a date is a business day, holiday, or early close.
  • Custom Holidays: Define and manage custom holidays (recurring or one-time events).
  • Exchange Sessions: Handle exchange sessions with customizable open/close times.
  • Multi-Year Support: Supports predefined calendars for financial exchanges over several years.
  • Market Identifier Code: Exchange calendars are defined by their ISO-10383 Market Identifier Code (MIC).

Installation

Install the package by running:

go get github.com/scmhub/calendar

Usage

Basic example
import (
    "fmt"
    "time"
    "github.com/scmhub/calendar"
)

func main() {
    // Create a calendar with default years (current year ±5 years)
	nyse := calendar.XNYS()

    // Or create a calendar with a custom start and end year
	customCal := calendar.XNYS(2010, 2035) // From 2010 to 2035

    // Check if today is a business day
     today := time.Now()
    if nyse.IsBusinessDay(today) {
        fmt.Println("Today is a business day.")
    } else {
        fmt.Println("Today is not a business day.")
    }

    // Get the next business day
    nextBusinessDay := nyse.NextBusinessDay(today)
    fmt.Printf("Next business day: %v\n", nextBusinessDay)

	// Check if Black Friday 2030 is an early close
	blackFriday := time.Date(2030, time.November, 29, 0, 0, 0, 0, calendar.NewYork)
	fmt.Println(customCal.IsEarlyClose(blackFriday)) // Outputs: true
}
Print specific calendar
import (
    "fmt"
    "github.com/scmhub/calendar"
)

func main() {
    // Load the New York Stock Exchange (XNYS) calendar
    nyse := calendar.XNYS()

    nyse.SetYears(2021,2022)

    fmt.Print(nyse)
}

Output

Calendar New York Stock Exchange:
        2021-Jan-01 Fri    New Year's Day
        2021-Jan-18 Mon    Martin Luther King Jr. Day
        2021-Feb-15 Mon    Presidents' Day
        2021-Apr-02 Fri    Good Friday
        2021-May-31 Mon    Memorial Day
        2021-Jul-05 Mon    Independence Day
        2021-Sep-06 Mon    Labor Day
        2021-Nov-25 Thu    Thanksgiving Day
        2021-Nov-26 Fri    Black Friday
        2021-Dec-24 Fri    Christmas Day
        2022-Jan-17 Mon    Martin Luther King Jr. Day
        2022-Feb-21 Mon    Presidents' Day
        2022-Apr-15 Fri    Good Friday
        2022-May-30 Mon    Memorial Day
        2022-Jun-20 Mon    Juneteenth National Independence Day
        2022-Jul-04 Mon    Independence Day
        2022-Sep-05 Mon    Labor Day
        2022-Nov-24 Thu    Thanksgiving Day
        2022-Nov-25 Fri    Black Friday
        2022-Dec-26 Mon    Christmas Day

Creating Holidays & Calendars
// Create Recurring Holidays
MemorialDay = &Holiday{
    Name:       "Memorial Day",
    Month:      time.May,
    Weekday:    time.Monday,
    NthWeekday: -1,
    calc:       CalcNthWeekday,
}
IndependenceDay = &Holiday{
    Name:       "Independence Day",
    Month:      time.July,
    Day:        4,
    observance: nearestWorkday,
    calc:       CalcDayOfMonth,
}

// Create Non Recurring Holidays
// September 11 - september 11, 2001
SeptemberEleven = &Holiday{
    Name:   "Sepember 11",
    Month:  time.September,
    Day:    11,
    OnYear: 2001,
    calc:   CalcDayOfMonth,
}

// September 11 -14 range
SeptemberElevenDays = []*Holiday{
    SeptemberEleven,
    SeptemberEleven.Copy("Sepember 11 day 2").SetOffset(1),
    SeptemberEleven.Copy("Sepember 11 day 3").SetOffset(2),
    SeptemberEleven.Copy("Sepember 11 day 4").SetOffset(3),
}

// Copy an Holiday and set observance
NewYear.Copy("New Year's Day").SetObservance(sundayToMonday)

// Create a Calendar
c := NewCalendar("New York Stock Exchange", NewYork, 2010, 2025)
// Set Session
c.SetSession(&Session{
    EarlyOpen:  7 * time.Hour,
    Open:       9*time.Hour + 30*time.Minute,
    Close:      16 * time.Hour,
    EarlyClose: 13 * time.Hour,
    LateClose:  20 * time.Hour,
})
// Add Recurring Holidays
c.AddHolidays(
    NewYear.Copy().SetObservance(sundayToMonday),
    MLKDay,
    PresidentsDay,
    GoodFriday,
    MemorialDay,
    JuneteenthDay,
    IndependenceDay,
    LaborDay,
    ThanksgivingDay,
    ChristmasDay.Copy().SetObservance(nearestWorkday),
)
// Add Non Recurring Holidays
c.AddHolidays(USNationalDaysOfMourning...)
c.AddHolidays(SeptemberElevenDays...)
c.AddHolidays(HurricaneSandyDays...)
// Early Closing
c.AddEarlyClosingDays(
    BeforeIndependenceDay.Copy().SetObservance(onlyOnWeekdays(time.Monday, time.Tuesday, time.Thursday)),
    AfterIndependenceDay.Copy().SetBeforeYear(2013).SetObservance(onlyOnWeekdays(time.Friday)),
    BeforeIndependenceDay.Copy().SetAfterYear(2013).SetObservance(onlyOnWeekdays(time.Wednesday)),
    BlackFriday,
    ChristmasEve.Copy().SetObservance(exeptOnWeekdays(time.Friday)), // Overlap Christmas day observance if friday
)

Existing Calendar

Market place Exchange MIC
New York New York Stock Exchange XNYS
New York NASDAQ XNAS
Chicago CBOE XCBO
Chicago CBOE Futures Exchange XCBF
Toronto Toronto Stock Exchange XTSE
Mexico Mexican Stock Exchange XMEX
Sao Paulo BMF Bovespa BVMF
London London Stock Exchange XLON
Amsterdam Euronext Amsterdam XAMS
Brussels Euronext Brussels XBRU
Lisbon Euronext Lisbon XLIS
Paris Euronext Paris XPAR
Milan Euronext Milan - Borsa Italiana XMIL
Madrid Bolsa de Madrid XMAD
Franckfurt Deutsche Boerse XFRA
Franckfurt Xetra XETR
Zurich SIX Swiss Exchange XSWX
Mumbai Bombay Stock Exchange XBOM
Bangkok Stock Exchange of Thailand XBKK
Singapore Singapore Exchange XSES
Hong Kong Hong Kong Stock Exchange XHKG
Shenzhen Shenzhen Stock Exchange XSHE
Shanghai Shanghai Stock Exchange XSHG
Seoul Korea Exchange XKRX
Tokyo Japan Exchange Group XJPX
Sidney Austrialian Securities Exchange XASX

API References

Some key functions:

  • IsBusinessDay(t time.Time): Returns whether the date is a business day.
  • NextBusinessDay(t time.Time): Gets the next business day after the given date.
  • AddHolidays(h ...Holiday): Adds holidays to the calendar.
  • SetSession(session *Session): Configures open/close times for the exchange.

Contributing

Contributions are welcome! Please submit issues or pull requests to improve the package. For significant changes, open an issue to discuss your ideas first.

Documentation

Index

Constants

View Source
const (
	AlMuharram       = time.Month(1)
	Safar            = time.Month(2)
	RabiAlAwwal      = time.Month(3)
	RabiAlAkhir      = time.Month(4)
	JumadaAlUla      = time.Month(5)
	JumadaAlThaniyah = time.Month(6)
	Rajab            = time.Month(7)
	ShaBan           = time.Month(8)
	Ramadan          = time.Month(9)
	Shawwal          = time.Month(10)
	DhuAlQaDah       = time.Month(11)
	DhuAlHijjah      = time.Month(12)
)

Hijri Calendar months

View Source
const YearsAhead = 5
View Source
const YearsPast = 5

Variables

View Source
var (
	Mexico, _       = time.LoadLocation("America/Mexico_City")
	Chicago, _      = time.LoadLocation("America/Chicago")
	Toronto, _      = time.LoadLocation("America/Toronto")
	NewYork, _      = time.LoadLocation("America/New_York")
	SaoPaulo, _     = time.LoadLocation("America/Sao_Paulo")
	London, _       = time.LoadLocation("Europe/London")
	Lisbon, _       = time.LoadLocation("Europe/Lisbon")
	Madrid, _       = time.LoadLocation("Europe/Madrid")
	Amsterdam, _    = time.LoadLocation("Europe/Amsterdam")
	Brussels, _     = time.LoadLocation("Europe/Brussels")
	Paris, _        = time.LoadLocation("Europe/Paris")
	Zurich, _       = time.LoadLocation("Europe/Zurich")
	Milan, _        = time.LoadLocation("Europe/Rome")
	Franckfurt, _   = time.LoadLocation("Europe/Berlin")
	Moscow, _       = time.LoadLocation("Europe/Moscow")
	Johannesburg, _ = time.LoadLocation("Africa/Johannesburg")
	Dubai, _        = time.LoadLocation("Asia/Dubai")
	Mumbai, _       = time.LoadLocation("Asia/Kolkata")
	Singapore, _    = time.LoadLocation("Asia/Singapore")
	Bangkok, _      = time.LoadLocation("Asia/Bangkok")
	HongKong, _     = time.LoadLocation("Asia/Hong_Kong")
	Shenzhen, _     = time.LoadLocation("Asia/Hong_Kong")
	Shanghai, _     = time.LoadLocation("Asia/Shanghai")
	Seoul, _        = time.LoadLocation("Asia/Seoul")
	Tokyo, _        = time.LoadLocation("Asia/Tokyo")
	Sydney, _       = time.LoadLocation("Australia/Sydney")
)

Predefined time locations for various cities.

View Source
var (
	// New Year's day on 1-Jan
	NewYear = &Holiday{
		Name:  "New Year's Day",
		Month: time.January,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
	// Epiphany on 6-Jan
	Epiphany = &Holiday{
		Name:  "Epiphany",
		Month: time.January,
		Day:   6,
		calc:  CalcDayOfMonth,
	}
	// Lunar New Year's Eve
	LunarNewYearEve = &Holiday{
		Name:   "Lunar New Year's Eve",
		Month:  time.January,
		Day:    1,
		Offset: -1,
		calc:   CalcLunisolarDayOfMonth,
	}
	// Lunar New Year's day
	LunarNewYear = &Holiday{
		Name:  "Lunar New Year's Day",
		Month: time.January,
		Day:   1,
		calc:  CalcLunisolarDayOfMonth,
	}
	// Carnival, Mardi Gras or Fat Tuesday  - 47 days before Easter
	Carnival = &Holiday{
		Name:   "Carnival",
		Offset: -47,
		calc:   CalcEasterOffset,
	}
	// Maundy Thursday - three days before Easter
	MaundyThursday = &Holiday{
		Name:   "Maundy Thursday",
		Offset: -3,
		calc:   CalcEasterOffset,
	}
	// Good Friday - two days before Easter
	GoodFriday = &Holiday{
		Name:   "Good Friday",
		Offset: -2,
		calc:   CalcEasterOffset,
	}
	// Northward Equinox - March Equinox - ~20-Mar
	NorthwardEquinox = &Holiday{
		Name: "Northward Equinox",
		calc: CalcNorthwardEquinox,
	}
	// Easter Monday - the day after Easter
	EasterMonday = &Holiday{
		Name:   "Easter Monday",
		Offset: 1,
		calc:   CalcEasterOffset,
	}
	// Eid al-Fitr - 1st day of Shawwal (10th month)
	EidAlFitr = &Holiday{
		Name:  "Eid al-Fitr",
		Month: Shawwal,
		Day:   1,
		calc:  CalcHijriDayOfMonth,
	}
	// Eid al-Adha - 1st day of Dhu al-Hijjah (10th month)
	EidAlAdha = &Holiday{
		Name:  "Eid al-Adha",
		Month: DhuAlHijjah,
		Day:   10,
		calc:  CalcHijriDayOfMonth,
	}
	// WorkersDay is the International Workers' Day on 1-May
	WorkersDay = &Holiday{
		Name:  "International Workers' Day",
		Month: time.May,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
	// Buddha's Birthday - 8th day of the 4th lunar month
	BuddhasBirthday = &Holiday{
		Name:  "Buddha's Birthday",
		Month: time.Month(4),
		Day:   8,
		calc:  CalcLunisolarDayOfMonth,
	}
	// Vesak Day - 15th day of the fourth lunar month
	VesakDay = &Holiday{
		Name:  "Vesak Day",
		Month: time.Month(4),
		Day:   15,
		calc:  CalcLunisolarDayOfMonth,
	}
	// Deepavali or Diwali, victory of light - the last day of the lunar month Asvina
	Deepavali = &Holiday{
		Name:  "Deepavali",
		Month: time.Month(9),
		Day:   -1,
		calc:  CalcLunisolarDayOfMonth,
	}
	// Ascension Day on the 39th day after Easter
	AscensionDay = &Holiday{
		Name:   "Ascension Day",
		Offset: 39,
		calc:   CalcEasterOffset,
	}
	// Pentecost Monday (or Whit Monday) on the day after Pentecost (50 days after Easter)
	PentecostMonday = &Holiday{
		Name:   "Pentecost Monday",
		Offset: 50,
		calc:   CalcEasterOffset,
	}
	// Corpus Christi 60 days after Easter
	CorpusChristi = &Holiday{
		Name:   "Corpus Christi",
		Offset: 60,
		calc:   CalcEasterOffset,
	}
	// Northern Solstice - June Solstice - ~20-Jun
	NorthernSolstice = &Holiday{
		Name: "Northern Solstice",
		calc: CalcNorthernSolstice,
	}
	// Assumption of Mary on 15-Aug
	AssumptionOfMary = &Holiday{
		Name:  "Assumption of Mary",
		Month: time.August,
		Day:   15,
		calc:  CalcDayOfMonth,
	}
	// Souththward Equinox - September Equinox - ~20-Sep
	SouthwardEquinox = &Holiday{
		Name: "Souththward Equinox",
		calc: CalcSouthwardEquinox,
	}
	// Double Ninth (Chung Yeung) Festival- 9th day of the 9th lunar month
	DoubleNinthFestival = &Holiday{
		Name:  "Double Ninth (Chung Yeung) Festival",
		Month: time.Month(9),
		Day:   9,
		calc:  CalcLunisolarDayOfMonth,
	}
	// Reformation Day - 31-Oct-2017
	ReformationDay = &Holiday{
		Name:  "Reformation Day",
		Month: time.October,
		Day:   31,
		calc:  CalcDayOfMonth,
	}
	// All Saints' Day on 1-Nov
	AllSaintsDay = &Holiday{
		Name:  "All Saints' Day",
		Month: time.November,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
	// Armistice Day on 11-Nov
	ArmisticeDay = &Holiday{
		Name:  "Armistice Day",
		Month: time.November,
		Day:   11,
		calc:  CalcDayOfMonth,
	}
	// Immaculate Conception on 8-Dec
	ImmaculateConception = &Holiday{
		Name:  "Immaculate Conception",
		Month: time.December,
		Day:   8,
		calc:  CalcDayOfMonth,
	}
	// Southern Solstice - December Solstice - ~20-Dec
	SouthernSolstice = &Holiday{
		Name: "Southern Solstice",
		calc: CalcSouthernSolstice,
	}
	// Christmas Eve on 24-Dec
	ChristmasEve = &Holiday{
		Name:  "Christmas Eve",
		Month: time.December,
		Day:   24,
		calc:  CalcDayOfMonth,
	}
	// Christmas Day on 25-Dec
	ChristmasDay = &Holiday{
		Name:  "Christmas Day",
		Month: time.December,
		Day:   25,
		calc:  CalcDayOfMonth,
	}
	// BoxingDay is the day after Christmas (Boxing Day / St. Stephen's Day) on 26-Dec
	BoxingDay = &Holiday{
		Name:  "Boxing Day",
		Month: time.December,
		Day:   26,
		calc:  CalcDayOfMonth,
	}
	// New Year's Eve on 31-Dec
	NewYearsEve = &Holiday{
		Name:  "New Year's Eve",
		Month: time.December,
		Day:   31,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// Martin Luther King Jr. Day on the 3rd Monday in January
	MLKDay = &Holiday{
		Name:       "Martin Luther King Jr. Day",
		Month:      time.January,
		Weekday:    time.Monday,
		NthWeekday: 3,
		calc:       CalcNthWeekday,
	}
	// Presidents' Day or Washington's Birthday on the 3rd Monday in February
	PresidentsDay = &Holiday{
		Name:       "Presidents' Day",
		Month:      time.February,
		Weekday:    time.Monday,
		NthWeekday: 3,
		calc:       CalcNthWeekday,
	}
	// Memorial Day on the last Monday in May
	MemorialDay = &Holiday{
		Name:       "Memorial Day",
		Month:      time.May,
		Weekday:    time.Monday,
		NthWeekday: -1,
		calc:       CalcNthWeekday,
	}
	// Juneteenth National Independence Day on 19-Jun
	JuneteenthDay = &Holiday{
		Name:       "Juneteenth National Independence Day",
		Month:      time.June,
		Day:        19,
		AfterYear:  2022,
		Observance: nearestWorkday,
		calc:       CalcDayOfMonth,
	}
	// Independence Day on 4-Jul
	IndependenceDay = &Holiday{
		Name:       "Independence Day",
		Month:      time.July,
		Day:        4,
		Observance: nearestWorkday,
		calc:       CalcDayOfMonth,
	}
	// Day Before Independence Day
	BeforeIndependenceDay = &Holiday{
		Name:  "Day before Independence Day",
		Month: time.July,
		Day:   3,
		calc:  CalcDayOfMonth,
	}
	// Day Before Independence Day
	AfterIndependenceDay = &Holiday{
		Name:  "Day after Independence Day",
		Month: time.July,
		Day:   5,
		calc:  CalcDayOfMonth,
	}
	// Labor Day on the first Monday in September
	LaborDay = &Holiday{
		Name:       "Labor Day",
		Month:      time.September,
		Weekday:    time.Monday,
		NthWeekday: 1,
		calc:       CalcNthWeekday,
	}

	// Columbus Day on the second Monday in October
	ColumbusDay = &Holiday{
		Name:       "Columbus Day",
		Month:      time.October,
		Weekday:    time.Monday,
		NthWeekday: 2,
		calc:       CalcNthWeekday,
	}
	// Veterans Day on 11-Nov
	VeteransDay = &Holiday{
		Name:  "Veterans Day",
		Month: time.November,
		Day:   11,
		calc:  CalcDayOfMonth,
	}
	// Thanksgiving Day on the fourth Thursday in November
	ThanksgivingDay = &Holiday{
		Name:       "Thanksgiving Day",
		Month:      time.November,
		Weekday:    time.Thursday,
		NthWeekday: 4,
		calc:       CalcNthWeekday,
	}
	// Black Friday is the day following Thanksgiving
	BlackFriday = &Holiday{
		Name:       "Black Friday",
		Month:      time.November,
		Weekday:    time.Thursday,
		NthWeekday: 4,
		Offset:     1,
		calc:       CalcNthWeekday,
	}

	// President Richard Nixon - April 27, 1994
	NixonMourningDay = &Holiday{
		Name:   "President Richard Nixon Mourning Day",
		Month:  time.April,
		Day:    27,
		OnYear: 1994,
		calc:   CalcDayOfMonth,
	}
	// President Ronald W. Reagan - June 11, 2004
	ReaganMourningDay = &Holiday{
		Name:   "President Ronald W. Reagan Mourning Day",
		Month:  time.June,
		Day:    11,
		OnYear: 2004,
		calc:   CalcDayOfMonth,
	}
	// President Gerald R. Ford - Jan 2, 2007
	FordMourningDay = &Holiday{
		Name:   "President Gerald R. Ford Mourning Day",
		Month:  time.January,
		Day:    2,
		OnYear: 2007,
		calc:   CalcDayOfMonth,
	}
	// President George Bush Senior - Nov 30, 2018
	BushSeniorMourningDay = &Holiday{
		Name:   "President George Bush Senior Mourning Day",
		Month:  time.November,
		Day:    30,
		OnYear: 2018,
		calc:   CalcDayOfMonth,
	}
	// National days of Mourning for the United States of America
	USNationalDaysOfMourning = []*Holiday{
		NixonMourningDay,
		ReaganMourningDay,
		FordMourningDay,
		BushSeniorMourningDay,
	}
	// September 11 - september 11, 2001
	SeptemberEleven = &Holiday{
		Name:   "Sepember 11",
		Month:  time.September,
		Day:    11,
		OnYear: 2001,
		calc:   CalcDayOfMonth,
	}
	// September 11 -14 range
	SeptemberElevenDays = []*Holiday{
		SeptemberEleven,
		SeptemberEleven.Copy("Sepember 11 day 2").SetOffset(1),
		SeptemberEleven.Copy("Sepember 11 day 3").SetOffset(2),
		SeptemberEleven.Copy("Sepember 11 day 4").SetOffset(3),
	}
	// Hurricane Sandy - october 29, 2012
	HurricaneSandy = &Holiday{
		Name:   "Hurricane Sandy",
		Month:  time.October,
		Day:    29,
		OnYear: 2012,
		calc:   CalcDayOfMonth,
	}
	HurricaneSandyDays = []*Holiday{
		HurricaneSandy,
		HurricaneSandy.Copy("Hurricane Sandy day 2").SetOffset(1),
	}
)
View Source
var (
	// Early May or May Day on the first monday of May
	EarlyMay = &Holiday{
		Name:       "Early May Bank Holiday",
		Month:      time.May,
		Weekday:    time.Monday,
		NthWeekday: 1,
		calc:       CalcNthWeekday,
	}
	// Spring Bank Holiday or Late May on the last monday of May
	SpringHoliday = &Holiday{
		Name:       "Spring Bank Holiday",
		Month:      time.May,
		Weekday:    time.Monday,
		NthWeekday: -1,
		calc:       CalcNthWeekday,
	}
	// Summer Bank Holiday on the last monday of August
	SummerHoliday = &Holiday{
		Name:       "Summer Bank Holiday",
		Month:      time.August,
		Weekday:    time.Monday,
		NthWeekday: -1,
		calc:       CalcNthWeekday,
	}

	// Queen Elizabeth II Golden Jubilee - 3,4 Jun 2002
	GoldenJubilee = &Holiday{
		Name:   "Golden Jubilee",
		Month:  time.June,
		Day:    3,
		OnYear: 2002,
		calc:   CalcDayOfMonth,
	}
	GoldenJubileeDays = []*Holiday{
		GoldenJubilee,
		GoldenJubilee.Copy("Golden Jubilee day 2").SetOffset(1),
	}
	// Wedding Day of Prince William and Catherine Middleton
	WilliamWedding = &Holiday{
		Name:   "Wedding Day of Prince William and Catherine Middleton",
		Month:  time.April,
		Day:    29,
		OnYear: 2011,
		calc:   CalcDayOfMonth,
	}
	// Queen Elizabeth II Diamond Jubilee - 4,5 Jun 2012
	DiamondJubilee = &Holiday{
		Name:   "Diamond Jubilee",
		Month:  time.June,
		Day:    4,
		OnYear: 2012,
		calc:   CalcDayOfMonth,
	}
	DiamondJubileeDays = []*Holiday{
		DiamondJubilee,
		DiamondJubilee.Copy("Diamond Jubilee day 2").SetOffset(1),
	}
	// VE-Day 75th Anniversary
	VEAnniversary = &Holiday{
		Name:   "VE-Day 75th Anniversary",
		Month:  time.May,
		Day:    8,
		OnYear: 2020,
		calc:   CalcDayOfMonth,
	}
	// Queen Elizabeth II Platinum Jubilee - 2,3 Jun 2022
	//  The late May bank holiday will be moved to Thursday 2nd June 2022 and the new, additional bank holiday will be on Friday 3rd June
	PlatinumJubilee = &Holiday{
		Name:   "Platinum Jubilee",
		Month:  time.June,
		Day:    2,
		OnYear: 2022,
		calc:   CalcDayOfMonth,
	}
	PlatinumJubileeDays = []*Holiday{
		PlatinumJubilee,
		PlatinumJubilee.Copy("Platinum Jubilee day 2").SetOffset(1),
	}
	// State Funeral of Queen Elizabeth II - 19 Sep 2022
	QueenElizabethFuneral = &Holiday{
		Name:   "State Funeral of Queen Elizabeth II",
		Month:  time.September,
		Day:    19,
		OnYear: 2022,
		calc:   CalcDayOfMonth,
	}
	// King Charles III Coronation Bank Holiday - 8 May 2023
	KingCharlesCoronation = &Holiday{
		Name:   "King Charles III Coronation Bank Holiday",
		Month:  time.May,
		Day:    8,
		OnYear: 2023,
		calc:   CalcDayOfMonth,
	}
)
View Source
var (
	// Liberty Day - 25-Apr
	LibertyDay = &Holiday{
		Name:  "Liberty Day",
		Month: time.April,
		Day:   25,
		calc:  CalcDayOfMonth,
	}
	// Portugal Day - 10-Jun
	PortugalDay = &Holiday{
		Name:  "Portugal Republic Day",
		Month: time.October,
		Day:   5,
		calc:  CalcDayOfMonth,
	}
	// Portugal Independence Day - 13-Jun
	SaintAnthonysDay = &Holiday{
		Name:  "Saint Anthony's Day",
		Month: time.December,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
	// Portugal Republic Day - 5-Oct
	PortugalRepublicDay = &Holiday{
		Name:  "Portugal REpublic Day",
		Month: time.October,
		Day:   5,
		calc:  CalcDayOfMonth,
	}
	// Portugal Independence Day - 1-Dec
	PortugalIndependenceDay = &Holiday{
		Name:  "Portugal Independence Day",
		Month: time.December,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// National Day of Spain - 5-Oct
	SpainNationalDay = &Holiday{
		Name:  "National Day of Spain",
		Month: time.October,
		Day:   12,
		calc:  CalcDayOfMonth,
	}
	// Constitution Day - 6-Dec
	SpainConstitutionDay = &Holiday{
		Name:  "Constitution Day",
		Month: time.December,
		Day:   6,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// Berchtold's Day
	BerchtoldsDay = &Holiday{
		Name:  "Berchtold's Day",
		Month: time.January,
		Day:   2,
		calc:  CalcDayOfMonth,
	}
	// Swiss National Day
	SwissNationalDay = &Holiday{
		Name:  "Swiss National Day",
		Month: time.August,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// Quingming Festival (Tomb Sweeping Day) - 104 days after start of winter usually April 4 or 5
	QingmingJie = &Holiday{
		Name:   "Quingming Festival",
		OnYear: -1,
		Offset: 104,
		calc:   CalcSouthernSolstice,
	}
	// Dragon Boat Festival day - 5th day of 5th lunar month
	DragonBoatFestival = &Holiday{
		Name:  "Dragon Boat Festival",
		Month: time.Month(5),
		Day:   5,
		calc:  CalcLunisolarDayOfMonth,
	}
	// People's Republic of China National day - 1-Oct
	ChinaNationalDay = &Holiday{
		Name:  "China National Day",
		Month: time.October,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
	// Mid-Autumn Festival 中秋節 - 15yh day of the 8th lunar month
	MidAutumnFestival = &Holiday{
		Name:  "Mid-Autumn Festival",
		Month: time.Month(8),
		Day:   15,
		calc:  CalcLunisolarDayOfMonth,
	}
)

China Holidays

View Source
var (
	// Coming of Age Day - Seijin no hi - 成人の日 - 2nd monday of January
	ComingOfAgeDay = &Holiday{
		Name:       "Coming of Age Day",
		Month:      time.January,
		Weekday:    time.Monday,
		NthWeekday: 2,
		calc:       CalcNthWeekday,
	}
	// National Foundation Day - Kenkoku kinen no hi - 建国記念の日 - 11-Feb
	NationalFoundationDay = &Holiday{
		Name:  "National Foundation Day",
		Month: time.February,
		Day:   11,
		calc:  CalcDayOfMonth,
	}
	// Greenery Day Before 2007 - Midori no hi - みどりの日 - 29-Apr before 2007
	GreeneryDayBefore2007 = &Holiday{
		Name:       "Greenery Day",
		Month:      time.April,
		Day:        29,
		BeforeYear: 2007,
		calc:       CalcDayOfMonth,
	}
	// Showa Day - Shōwa no hi - 昭和の日 - 29-Apr after 2007
	ShowaDay = &Holiday{
		Name:      "Showa Day",
		Month:     time.April,
		Day:       29,
		AfterYear: 2007,
		calc:      CalcDayOfMonth,
	}
	// Constitution Memorial Day - Kenpō kinen bi - 憲法記念日 - 3-May
	ConstitutionMemorialDay = &Holiday{
		Name:  "Constitution Memorial Day",
		Month: time.May,
		Day:   3,
		calc:  CalcDayOfMonth,
	}
	// Citizen's Holiday ot the Golden Week before 2007 - Kokumin no kyūjitsu - 国民の休日 - 4-May before 2007
	CitizensHolidayGoldenWeek = &Holiday{
		Name:       "Citizen's Holiday of the Golden Week",
		Month:      time.May,
		Day:        4,
		BeforeYear: 2007,
		calc:       CalcDayOfMonth,
	}
	// Greenery Day After 2007 - Midori no hi - みどりの日 - 4-May after 2007
	GreeneryDayAfter2007 = &Holiday{
		Name:      "Greenery Day",
		Month:     time.May,
		Day:       4,
		AfterYear: 2007,
		calc:      CalcDayOfMonth,
	}
	// Children's Day - Kodomo no hi - こどもの日 - 5-May
	ChildrensDay = &Holiday{
		Name:  "Children's Day",
		Month: time.May,
		Day:   5,
		calc:  CalcDayOfMonth,
	}
	// Marine Day - Umi no hi - 海の日 - 3rd monday of July
	MarineDay = &Holiday{
		Name:       "Marine Day",
		Month:      time.July,
		Weekday:    time.Monday,
		NthWeekday: 3,
		AfterYear:  2003,
		calc:       CalcNthWeekday,
	}
	// Marine Day before 2003 - Umi no hi - 海の日 - 20-July
	MarineDayBefore2003 = &Holiday{
		Name:       "Marine Day before 2003",
		Month:      time.July,
		Day:        23,
		BeforeYear: 2003,
		calc:       CalcDayOfMonth,
	}
	// Marine Day 2020- Umi no hi - 海の日 - Changed for Tokyo Olympics - 23-Jul-2020
	MarineDay2020 = &Holiday{
		Name:   "Marine Day 2020",
		Month:  time.July,
		Day:    23,
		OnYear: 2020,
		calc:   CalcDayOfMonth,
	}
	// Marine Day 2021- Umi no hi - 海の日 - Changed for Tokyo Olympics (2020 postponed) - 22-Jul-2021
	MarineDay2021 = &Holiday{
		Name:   "Marine Day 2021",
		Month:  time.July,
		Day:    22,
		OnYear: 2021,
		calc:   CalcDayOfMonth,
	}
	// Mountain Day - Yama no hi - 山の日 - 3rd monday of July
	MountainDay = &Holiday{
		Name:      "Mountain Day",
		Month:     time.August,
		Day:       11,
		AfterYear: 2016,
		calc:      CalcDayOfMonth,
	}
	// Mountain Day 2020 - Yama no hi - 山の日 - Changed for Tokyo Olympics - 10-Aug-2020
	MountainDay2020 = &Holiday{
		Name:   "Mountain Day 2020",
		Month:  time.August,
		Day:    10,
		OnYear: 2020,
		calc:   CalcDayOfMonth,
	}
	// Mountain Day 2021 - Yama no hi - 山の日 - Changed for Tokyo Olympics (2020 postponed) - 9-Aug-2021
	MountainDay2021 = &Holiday{
		Name:   "Mountain Day 2021",
		Month:  time.August,
		Day:    9,
		OnYear: 2021,
		calc:   CalcDayOfMonth,
	}
	// Respect for the Aged Day - Keirō no hi - 敬老の日 - 3rd monday of September after 2003
	RespectForTheAgedDay = &Holiday{
		Name:       "Respect for the Aged Day",
		Month:      time.September,
		Weekday:    time.Monday,
		NthWeekday: 3,
		AfterYear:  2003,
		calc:       CalcNthWeekday,
	}
	// Respect for the Aged Day before 2003 - Keirō no hi - 敬老の日 - 15-Sep before 2003
	RespectForTheAgedDayBefore2003 = &Holiday{
		Name:       "Respect for the Aged Day before 2003",
		Month:      time.September,
		Day:        15,
		NthWeekday: 3,
		BeforeYear: 2003,
		calc:       CalcDayOfMonth,
	}
	// Health and Sports Day - Supōtsu no hi - スポーツの日 - 2nd monday of October
	HealthAndSportsDay = &Holiday{
		Name:       "Health and Sports Day",
		Month:      time.October,
		Weekday:    time.Monday,
		NthWeekday: 2,
		calc:       CalcNthWeekday,
	}
	// Health and Sports Day 2020 - Changed for Tokyo Olympics - 24-Jul-2020
	HealthAndSportsDay2020 = &Holiday{
		Name:   "Health and Sports Day",
		Month:  time.July,
		Day:    24,
		OnYear: 2020,
		calc:   CalcDayOfMonth,
	}
	// Health and Sports Day 2021 - Changed for Tokyo Olympics (2020 postponed) - 23-Jul-2021
	HealthAndSportsDay2021 = &Holiday{
		Name:   "Health and Sports Day",
		Month:  time.July,
		Day:    23,
		OnYear: 2021,
		calc:   CalcDayOfMonth,
	}
	// Culture Day - Bunka no hi - 文化の日 - 3-Nov
	CultureDay = &Holiday{
		Name:  "Culture Day",
		Month: time.November,
		Day:   3,
		calc:  CalcDayOfMonth,
	}
	// Labor Thanksgiving Day - Kinrō Kansha no hi - 勤労感謝の日 - 23-Nov
	LaborThanksgivingDay = &Holiday{
		Name:  "Labor Thanksgiving Day",
		Month: time.November,
		Day:   23,
		calc:  CalcDayOfMonth,
	}
	// Emperor Akihito's Birthday - Tennō tanjōbi - 天皇誕生日 - 23-Dec before 30-Apr-2019
	EmperorAkihitoBirthday = &Holiday{
		Name:       "Emperor Akihito's Birthday",
		Month:      time.December,
		Day:        23,
		BeforeYear: 2019,
		calc:       CalcDayOfMonth,
	}
	// Emperor Naruhito's Birthday - Tennō tanjōbi - 天皇誕生日 - 23-Feb before 30-Apr-2019
	EmperorNaruhitoBirthday = &Holiday{
		Name:      "Emperor Naruhito's Birthday",
		Month:     time.February,
		Day:       23,
		AfterYear: 2020,
		calc:      CalcDayOfMonth,
	}

	// Emperor Akihito's Abdication Day - Taiirei-Seiden-no-gi - 退位礼正殿の儀 - 30-Apr-2019
	AbdicationDay = &Holiday{
		Name:   "Emperor Akihito's Abdication Day",
		Month:  time.April,
		Day:    30,
		OnYear: 2019,
		calc:   CalcDayOfMonth,
	}
	// Beginning of the Reiwa era and accession date of Emperor Naruhito - 1-May-2019
	AccessionDay = &Holiday{
		Name:   "Naruhito's Accession Day",
		Month:  time.May,
		Day:    1,
		OnYear: 2019,
		calc:   CalcDayOfMonth,
	}
	// Accession Citizen's Holiday - 2-May-2019
	AccessionCitizensHoliday = &Holiday{
		Name:   "Accession Citizen's Holiday",
		Month:  time.May,
		Day:    2,
		OnYear: 2019,
		calc:   CalcDayOfMonth,
	}
	// Enthronement Ceremony - Sokuirei-Seiden-no-gi - 即位礼正殿の儀 - 22-Oct-2019
	EnthronementCeremony = &Holiday{
		Name:   "Enthronement Ceremony",
		Month:  time.October,
		Day:    22,
		OnYear: 2019,
		calc:   CalcDayOfMonth,
	}
	// Silver Week Citizen's Holidays on 22nd of September
	SilverWeekCitizensHoliday = &Holiday{
		Name:   "Silver Week Citizen's Holidays",
		Month:  time.September,
		Day:    22,
		OnYear: 2009,
		calc:   CalcDayOfMonth,
	}
	// Silver Week Citizen's Holidays on 21st of September
	SilverWeekCitizensHoliday21 = &Holiday{
		Name:   "Silver Week Citizen's Holidays on the 21st",
		Month:  time.September,
		Day:    21,
		OnYear: 2032,
		calc:   CalcDayOfMonth,
	}
	SilverWeekCitizensHolidays = []*Holiday{
		SilverWeekCitizensHoliday,
		SilverWeekCitizensHoliday.Copy().SetOnYear(2015),
		SilverWeekCitizensHoliday.Copy().SetOnYear(2020),
		SilverWeekCitizensHoliday.Copy().SetOnYear(2026),
		SilverWeekCitizensHoliday21,
		SilverWeekCitizensHoliday.Copy().SetOnYear(2037),
		SilverWeekCitizensHoliday.Copy().SetOnYear(2043),
		SilverWeekCitizensHoliday21.Copy().SetOnYear(2049),
		SilverWeekCitizensHoliday.Copy().SetOnYear(2054),
		SilverWeekCitizensHoliday21.Copy().SetOnYear(2060),
		SilverWeekCitizensHoliday.Copy().SetOnYear(2071),
		SilverWeekCitizensHoliday21.Copy().SetOnYear(2077),
		SilverWeekCitizensHoliday21.Copy().SetOnYear(2088),
		SilverWeekCitizensHoliday21.Copy().SetOnYear(2094),
		SilverWeekCitizensHoliday.Copy().SetOnYear(2099),
	}
)
View Source
var (
	// Bastille Day - 14-Jul
	BastilleDay = &Holiday{
		Name:  "Bastille Day",
		Month: time.July,
		Day:   14,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// Belgium Independence Day - 21-Jul
	BelgiumIndependenceDay = &Holiday{
		Name:  "Belgium Independence Day",
		Month: time.July,
		Day:   21,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// Hong Kong Special Administrative Region Establishment Day - 香港特別行政區成立紀念日 - 1st of Jul
	EstablishmentDay = &Holiday{
		Name:  "Hong kong Establishment Day",
		Month: time.July,
		Day:   1,
		calc:  CalcDayOfMonth,
	}
)

Hong kong Holidays * https://www.hkex.com.hk/News/HKEX-Calendar?sc_lang=en

View Source
var (
	// German Unity Day - 3-Oct
	GermanUnityDay = &Holiday{
		Name:  "German Unity Day",
		Month: time.October,
		Day:   3,
		calc:  CalcDayOfMonth,
	}
)
View Source
var LilianDate = time.Date(1582, 10, 15, 0, 0, 0, 0, time.UTC)

Gregorian calendar start date

View Source
var (
	// Koninginnedag (Koningsdag King's day since 2013) - 30-Apr
	QueensDay = &Holiday{
		Name:  "Queen's Day",
		Month: time.April,
		Day:   30,
		calc:  CalcDayOfMonth,
	}
)
View Source
var (
	// Singapore National Day - 9th of Aug
	SingaporeNationalDay = &Holiday{
		Name:  "Singapore National Day ",
		Month: time.August,
		Day:   9,
		calc:  CalcDayOfMonth,
	}
)

Singapore Holidays

Functions

func BOD

func BOD(t time.Time) time.Time

Beginning Of Day is the first time of that day

func CalcDayOfMonth

func CalcDayOfMonth(h *Holiday, year int, loc *time.Location) time.Time

Day of month in Gregorian Calendar, -1 means last day of the month.

func CalcEasterOffset

func CalcEasterOffset(h *Holiday, year int, loc *time.Location) time.Time

Easter sunday.

func CalcHijriDayOfMonth

func CalcHijriDayOfMonth(h *Holiday, year int, loc *time.Location) time.Time

Day of month in Hijri Calendar, -1 means last day of the month.

func CalcLunisolarDayOfMonth

func CalcLunisolarDayOfMonth(h *Holiday, year int, loc *time.Location) time.Time

Day of month in Lunisolar Calendar, -1 means last day of the month.

func CalcNorthernSolstice

func CalcNorthernSolstice(h *Holiday, year int, loc *time.Location) time.Time

June Solstice.

func CalcNorthwardEquinox

func CalcNorthwardEquinox(h *Holiday, year int, loc *time.Location) time.Time

March Equinox.

func CalcNthWeekday

func CalcNthWeekday(h *Holiday, year int, loc *time.Location) time.Time

Nth occurrence of a weekday like 3rd monday, -1 means last monday of the month.

func CalcSouthernSolstice

func CalcSouthernSolstice(h *Holiday, year int, loc *time.Location) time.Time

December Solstice.

func CalcSouthwardEquinox

func CalcSouthwardEquinox(h *Holiday, year int, loc *time.Location) time.Time

September Equinox.

func EOD

func EOD(t time.Time) time.Time

End Of Day is the last time of that day

func Easter

func Easter(year int) (day int, month time.Month)

year -> day and month of Easter

func GetLeapMonth

func GetLeapMonth(year int) int

GetLeapMonth returns the leap month of a year (0 if none).

func GetLunisolarMonthDays

func GetLunisolarMonthDays(year int, month time.Month, leapMonth bool) int

GetLunisolarMonthDays gets the number of days in a lunar month.

func GetMonthDays

func GetMonthDays(year int, month time.Month) int

Year, Month -> number of days in the month

func GetYearDays

func GetYearDays(year int) int

Get the number of days in the Gregorian calendar year

func GregorianToHijri

func GregorianToHijri(t time.Time) time.Time

Gregorian calendar Time -> Hijri calendar Time

func GregorianToJulian

func GregorianToJulian(t time.Time) time.Time

Gregorian calendar Time -> Julian calendar Time

func GregorianToLunisolar

func GregorianToLunisolar(t time.Time) (time.Time, bool)

GregorianToLunisolar returns a Lunisolar calendar time from a Gregorian calendar time.

func GtoJDN

func GtoJDN(t time.Time) int

Gregorian calendar time -> Julian Day Number

func HijriToGregorian

func HijriToGregorian(t time.Time) time.Time

Hijri calendar Time -> Gregorian calendar Time

func HijriYear

func HijriYear(gy int) int

Gregorian Year -> Hijri Year

func HtoJDN

func HtoJDN(t time.Time) int

Hijri calendar time -> Julian Day Number

func IsJulianLeapYear

func IsJulianLeapYear(year int) bool

Is a Leap Year in the Julian calendar

func IsLeapYear

func IsLeapYear(year int) bool

Is a Leap Year in the Gregorian calendar

func IsWeekend

func IsWeekend(t time.Time) bool

func JDNtoG

func JDNtoG(jd int, loc ...*time.Location) time.Time

Julian Day Number -> Gregorian calendar time (UTC default loc if not provided)

func JDNtoH

func JDNtoH(jd int, loc ...*time.Location) time.Time

Julian Day Number -> Hijri calendar time (UTC default loc if not provided)

func JDNtoJ

func JDNtoJ(jd int, loc ...*time.Location) time.Time

Julian Day Number -> Julian calendar time (UTC default loc if not provided)

func JtoJDN

func JtoJDN(t time.Time) int

Julian calendar time -> Julian Day Number

func JulianToGegorian

func JulianToGegorian(t time.Time) time.Time

Julian calendar Time -> Gregorian calendar Time

func LunisolarToGregorian

func LunisolarToGregorian(t time.Time, leap bool) time.Time

LunisolarToGregorian returns a Gregorian calendar time from a Lunisolar calendar time.

func NthWeekday

func NthWeekday(year int, month time.Month, weekday time.Weekday, n int, loc *time.Location) time.Time

Nth occurrence of a weekday like 3rd monday

func YearInRange

func YearInRange(year int, yearRange []int) bool

func YearRange

func YearRange(start, end int) []int

Types

type Calendar

type Calendar struct {
	Name string
	Loc  *time.Location // NewYork or time.LoadLocation("America/New_York")
	// contains filtered or unexported fields
}

Calendar represents a calendar with holidays and sessions.

func BVMF

func BVMF(years ...int) *Calendar

Brasilian Stock Exchange - Bolsa de Valores, Mercados e Futuros

func GetCalendar

func GetCalendar(name string, years ...int) *Calendar

func NewCalendar

func NewCalendar(name string, loc *time.Location, years ...int) *Calendar

NewCalendar creates a new Calendar instance based on the provided parameters. It accepts a name for the calendar, a location, and an optional list of years. If no years are specified, it defaults to a range of 5 years before and after the current year. If one year is provided, it sets that year as the start and calculates the end as 10 years later. If two years are provided, it calculates the end year based on the first year and checks if the second is less than 100.

func XAMS

func XAMS(years ...int) *Calendar

Euronext Amsterdam

func XASX

func XASX(years ...int) *Calendar

Australian Securities Exchange

func XBKK

func XBKK(years ...int) *Calendar

Stock Exchange of Thailand

func XBOM

func XBOM(years ...int) *Calendar

Bombay Stock Exchange

func XBRU

func XBRU(years ...int) *Calendar

Euronext Brussels

func XCBF

func XCBF(years ...int) *Calendar

Cboe Futures Exchange

func XCBO

func XCBO(years ...int) *Calendar

Chicago Board Options Exchange

func XETR

func XETR(years ...int) *Calendar

Deutsche Borse Xetra

func XFRA

func XFRA(years ...int) *Calendar

Frankfurt Stock Exchange

func XHKG

func XHKG(years ...int) *Calendar

Stock Exchange of Hong Kong

func XJPX

func XJPX(years ...int) *Calendar

Japan Exchange Group

func XKRX

func XKRX(years ...int) *Calendar

Korea Exchange

func XLIS

func XLIS(years ...int) *Calendar

Euronext Lisbon

func XLON

func XLON(years ...int) *Calendar

London Stock Exchange

func XMAD

func XMAD(years ...int) *Calendar

Madrid Stock Exchange

func XMEX

func XMEX(years ...int) *Calendar

Mexican Stock Exchange

func XMIL

func XMIL(years ...int) *Calendar

Euronext Milan - Borsa Italiana S.P.A

func XNAS

func XNAS(years ...int) *Calendar

NASDAQ

func XNYS

func XNYS(years ...int) *Calendar

New York Stock Exchange

func XPAR

func XPAR(years ...int) *Calendar

Euronext Paris

func XSES

func XSES(years ...int) *Calendar

Singapore Exchange (SGX)

func XSHE

func XSHE(years ...int) *Calendar

Shenzhen Stock Exchange

func XSHG

func XSHG(years ...int) *Calendar

Shanghai Stock Exchange

func XSWX

func XSWX(years ...int) *Calendar

SIX Group (SWX Swiss Exchange)

func XTSE

func XTSE(years ...int) *Calendar

Toronto Stock Exchange

func (*Calendar) AddEarlyClosingDays

func (c *Calendar) AddEarlyClosingDays(h ...*Holiday)

AddEarlyClosingDays appends early closing holidays to the calendar.

func (*Calendar) AddHolidays

func (c *Calendar) AddHolidays(h ...*Holiday)

AddHolidays appends holidays to the calendar and adds them to the holiday list.

func (*Calendar) HasHoliday

func (c *Calendar) HasHoliday(h *Holiday) bool

HasHoliday checks if a specific holiday is present in the calendar.

func (*Calendar) IsBusinessDay

func (c *Calendar) IsBusinessDay(t time.Time) bool

IsBusinessDay checks if a specific Tims is a business day for this calendar.

func (*Calendar) IsEarlyClose

func (c *Calendar) IsEarlyClose(t time.Time) bool

IsHoliday checks if a specific Tims is a early close for this calendar.

func (*Calendar) IsHoliday

func (c *Calendar) IsHoliday(t time.Time) bool

IsHoliday checks if a specific Tims is a holiday day for this calendar.

func (*Calendar) IsOpen

func (c *Calendar) IsOpen(t time.Time) bool

IsOpen checks if a specific Tims is in a business session for this calendar.

func (*Calendar) NextBusinessDay

func (c *Calendar) NextBusinessDay(t time.Time) time.Time

NextBusinessDay returns the business day following the provided Time.

func (*Calendar) NextClose

func (c *Calendar) NextClose(t time.Time) time.Time

NextClose return the next closing time

func (*Calendar) NextHoliday

func (c *Calendar) NextHoliday(t time.Time) (time.Time, *Holiday)

NextHoliday returns the following holiday time and Holiday for the provided Time.

func (*Calendar) Session

func (c *Calendar) Session() *Session

Session returns the current session details.

func (*Calendar) SetSession

func (c *Calendar) SetSession(s *Session)

SetSession updates the session details for the calendar.

func (*Calendar) SetYears

func (c *Calendar) SetYears(start, end int)

SetYears updates the start and end years for the calendar and resets holidays.

func (*Calendar) String

func (c *Calendar) String() string

func (*Calendar) Years

func (c *Calendar) Years() (start, end int)

Years returns the start and end years of the calendar.

type Holiday

type Holiday struct {
	Name       string
	OnYear     int        // Used if holiday occures only on specific year
	BeforeYear int        // Used if holiday occures before a specific year
	AfterYear  int        // Used if holiday occures after or on a specific year
	Month      time.Month // Gregorian month also used for lunar month
	Day        int
	Weekday    time.Weekday
	NthWeekday int
	Offset     int

	Observance observance
	// contains filtered or unexported fields
}

func (*Holiday) AddOffset

func (h *Holiday) AddOffset(o int) *Holiday

func (*Holiday) Calc

func (h *Holiday) Calc(year int, loc *time.Location) time.Time

Calculate the holiday time.Time for a given year.

func (Holiday) Copy

func (h Holiday) Copy(name ...string) *Holiday

Copy returns a copy of holiday. Always set observance on a copy.

func (*Holiday) SetAfterYear

func (h *Holiday) SetAfterYear(year int) *Holiday

func (*Holiday) SetBeforeYear

func (h *Holiday) SetBeforeYear(year int) *Holiday

func (*Holiday) SetObservance

func (h *Holiday) SetObservance(o observance) *Holiday

func (*Holiday) SetOffset

func (h *Holiday) SetOffset(o int) *Holiday

func (*Holiday) SetOnYear

func (h *Holiday) SetOnYear(year int) *Holiday

type Session

type Session struct {
	EarlyOpen  time.Duration
	Open       time.Duration
	BreakStart time.Duration
	BreakStop  time.Duration
	Close      time.Duration
	EarlyClose time.Duration
	LateClose  time.Duration
}

Session defines the operating hours and breaks for the calendar.

func (*Session) HasBreak

func (s *Session) HasBreak() bool

HasBreak checks if the session has a break defined.

func (Session) IsZero

func (s Session) IsZero() bool

IsZero checks if the Session is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL