NepaliCalendarToolkit

NuGet Downloads

Beyond conversion: This toolkit made easy – configurable weekends, holidays, and date ranges for months, quarters, fiscal years, or any custom period.

Features

  • Convert between AD (Gregorian) and BS (Nepali) dates
  • Configurable weekend days
  • Nepali public holidays support
  • Date range calculations
  • Month, quarter, and fiscal year helpers
  • Working day calculations
  • Accurate calendar data from 1970-2099 BS

Installation

Terminal
dotnet add package NepaliCalendarToolkit

Quick Start

Basic Date Conversion

using NepaliCalendarToolkit;
// Convert AD to BS
DateOnly adDate = new DateOnly(2024, 1, 15);
NepaliDate bsDate = NepaliCalendar.ConvertToNepali(adDate);
Console.WriteLine(bsDate); // Output: 2080/10/01
// Convert BS to AD
NepaliDate bsDate = new NepaliDate(2080, 10, 1);
DateOnly adDate = NepaliCalendar.ConvertToEnglish(bsDate);
Console.WriteLine(adDate); // Output: 1/15/2024

Working with NepaliDate

// Create a Nepali date
NepaliDate date = new NepaliDate(2080, 10, 15);
// Access properties
Console.WriteLine($"Year: {date.Year}"); // 2080
Console.WriteLine($"Month: {date.Month}"); // 10
Console.WriteLine($"Day: {date.Day}"); // 15
// Format output
Console.WriteLine(date.ToString("yyyy/MM/dd")); // 2080/10/15
Console.WriteLine(date.ToString("MMMM dd, yyyy")); // Magh 15, 2080

Working Days

Calculate Working Days

var calendar = new NepaliCalendarService();
// Get working days between two dates
var start = new NepaliDate(2080, 1, 1);
var end = new NepaliDate(2080, 1, 31);
int workingDays = calendar.GetWorkingDays(start, end);

Configure Weekends

// Configure custom weekend days (default: Saturday only)
var options = new NepaliCalendarOptions
{
WeekendDays = new[] { DayOfWeek.Saturday }
};
var calendar = new NepaliCalendarService(options);
// For Middle East countries where Friday-Saturday are weekends
var options = new NepaliCalendarOptions
{
WeekendDays = new[] { DayOfWeek.Friday, DayOfWeek.Saturday }
};

Holidays

Get Holidays

var calendar = new NepaliCalendarService();
// Get all holidays for a year
var holidays = calendar.GetHolidays(2080);
foreach (var holiday in holidays)
{
Console.WriteLine($"{holiday.Date}: {holiday.Name}");
}
// Check if a date is a holiday
var date = new NepaliDate(2080, 9, 15); // Dashain
bool isHoliday = calendar.IsHoliday(date);

Add Custom Holidays

var options = new NepaliCalendarOptions();
options.CustomHolidays.Add(new Holiday
{
Date = new NepaliDate(2080, 5, 1),
Name = "Company Anniversary",
IsRecurring = true
});
var calendar = new NepaliCalendarService(options);

Built-in holidays include major Nepali festivals like Dashain, Tihar, New Year, and national holidays.

Date Ranges

Get Month Range

var calendar = new NepaliCalendarService();
// Get start and end dates of a month
var range = calendar.GetMonthRange(2080, 10); // Magh 2080
Console.WriteLine($"Start: {range.Start}");
Console.WriteLine($"End: {range.End}");
Console.WriteLine($"Days: {range.TotalDays}");

Get Fiscal Year Range

// Nepali fiscal year starts from Shrawan (month 4)
var fiscalYear = calendar.GetFiscalYearRange(2080);
Console.WriteLine($"FY 2080/81: {fiscalYear.Start} to {fiscalYear.End}");

Get Quarter Range

// Get quarter range
var q1 = calendar.GetQuarterRange(2080, 1);
var q2 = calendar.GetQuarterRange(2080, 2);
var q3 = calendar.GetQuarterRange(2080, 3);
var q4 = calendar.GetQuarterRange(2080, 4);

Validation

Validate Nepali Date

var calendar = new NepaliCalendarService();
// Check if date is valid
bool isValid = calendar.IsValidDate(2080, 10, 32);
// Returns false - Magh doesn't have 32 days
// Get days in month
int days = calendar.GetDaysInMonth(2080, 2); // Jestha
// Returns 31 or 32 depending on the year

Nepali calendar has variable month lengths. Always validate dates before processing.

Advanced Usage

Add/Subtract Days

var date = new NepaliDate(2080, 10, 15);
// Add days
var futureDate = date.AddDays(10);
// Add months
var futureMonth = date.AddMonths(2);
// Add years
var futureYear = date.AddYears(1);

Get Age

var birthDate = new NepaliDate(2040, 5, 15);
var age = NepaliCalendar.GetAge(birthDate);
Console.WriteLine($"Age: {age.Years} years, {age.Months} months, {age.Days} days");

API Reference

NepaliDate

PropertyTypeDescription
YearintYear in BS
MonthintMonth (1-12)
DayintDay of month
DayOfWeekDayOfWeekDay of week

NepaliCalendarService

MethodDescription
ConvertToNepali(DateOnly)Convert AD to BS
ConvertToEnglish(NepaliDate)Convert BS to AD
GetWorkingDays(start, end)Count working days
IsHoliday(date)Check if holiday
GetHolidays(year)Get all holidays for year
GetMonthRange(year, month)Get month date range
GetFiscalYearRange(year)Get fiscal year range
GetQuarterRange(year, quarter)Get quarter range

Example: Leave Calculator

public class LeaveCalculator
{
private readonly NepaliCalendarService _calendar;
public LeaveCalculator()
{
_calendar = new NepaliCalendarService();
}
public int CalculateLeaveDays(NepaliDate start, NepaliDate end)
{
return _calendar.GetWorkingDays(start, end);
}
public NepaliDate GetReturnDate(NepaliDate start, int leaveDays)
{
var current = start;
int countedDays = 0;
while (countedDays < leaveDays)
{
current = current.AddDays(1);
if (!_calendar.IsHoliday(current) &&
!_calendar.IsWeekend(current))
{
countedDays++;
}
}
return current;
}
}

Use this toolkit for payroll systems, leave management, and any application requiring Nepali calendar support.

Support