Skip to content

Code Examples

Agent 57951 edited this page Dec 31, 2025 · 1 revision

Code Examples

Comprehensive collection of code examples demonstrating common usage patterns.

Table of Contents


Basic Date Operations

Creating Dates

using KurdishCalendar.Core;
using System;

// Create a specific Kurdish date
KurdishDate nowruz = new KurdishDate(2725, 1, 1);

// Get today's Kurdish date
KurdishDate today = KurdishDate.Today;

// Get current Kurdish date and time
KurdishDate now = KurdishDate.Now;

// Convert from Gregorian DateTime
DateTime gregorian = new DateTime(2025, 3, 21);
KurdishDate fromGregorian = KurdishDate.FromDateTime(gregorian);

// Implicit conversion from DateTime
KurdishDate implicit = new DateTime(2025, 3, 21);

Converting to Gregorian

using KurdishCalendar.Core;
using System;

KurdishDate kurdishDate = new KurdishDate(2725, 1, 1);

// Convert to Gregorian DateTime
DateTime gregorian = kurdishDate.ToDateTime();

// Explicit conversion to DateTime
DateTime explicitConversion = (DateTime)kurdishDate;

Console.WriteLine($"Kurdish: {kurdishDate}");
Console.WriteLine($"Gregorian: {gregorian:yyyy-MM-dd}");
// Output:
// Kurdish: 01/01/2725
// Gregorian: 2025-03-21

Getting Date Components

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 6, 15);

int year = date.Year;           // 2725
int month = date.Month;         // 6
int day = date.Day;             // 15
int dayOfYear = date.DayOfYear; // 186
bool isLeap = date.IsLeapYear;  // false
DayOfWeek dayOfWeek = date.DayOfWeek; // e.g., Monday

Console.WriteLine($"Year: {year}");
Console.WriteLine($"Month: {month}");
Console.WriteLine($"Day: {day}");
Console.WriteLine($"Day of year: {dayOfYear}");
Console.WriteLine($"Is leap year: {isLeap}");
Console.WriteLine($"Day of week: {dayOfWeek}");

Date Formatting

Standard Format Strings

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 1, 15);

// Short date format: d
string shortDate = date.ToString("d");
// Output: 15/01/2725

// Long date format: D
string longDate = date.ToString("D", KurdishDialect.SoraniLatin);
// Output: 15 Xakelêwe 2725

// Month day format: M or m
string monthDay = date.ToString("M", KurdishDialect.SoraniLatin);
// Output: 15 Xakelêwe

// Year month format: Y or y
string yearMonth = date.ToString("Y", KurdishDialect.SoraniLatin);
// Output: Xakelêwe 2725

// Full date with day name: f
string fullShort = date.ToString("f", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725

// Full date with day name: F
string fullLong = date.ToString("F", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725

Custom Format Strings

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 6, 15);

// Custom formats
string format1 = date.ToString("dd/MM/yyyy", KurdishDialect.SoraniLatin);
// Output: 15/06/2725

string format2 = date.ToString("d MMMM yyyy", KurdishDialect.SoraniLatin);
// Output: 15 Xermanan 2725

string format3 = date.ToString("dddd, dd MMM yy", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xer 25

string format4 = date.ToString("MMMM dd, yyyy", KurdishDialect.SoraniLatin);
// Output: Xermanan 15, 2725

// Format tokens:
// d, dd    = day (1-2 digits)
// ddd      = abbreviated day name
// dddd     = full day name
// M, MM    = month number (1-2 digits)
// MMM      = abbreviated month name
// MMMM     = full month name
// yy       = 2-digit year
// yyyy     = 4-digit year

Formatting in Different Scripts

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 1, 15);

// Sorani Latin
string soraniLatin = date.ToString("D", KurdishDialect.SoraniLatin);
// Output: 15 Xakelêwe 2725

// Sorani Arabic
string soraniArabic = date.ToString("D", KurdishDialect.SoraniArabic);
// Output: ١٥ خاکەلێوە ٢٧٢٥

// Kurmanji Latin
string kurmanjiLatin = date.ToString("D", KurdishDialect.KurmanjiLatin);
// Output: 15 Xakelêwe 2725

// Kurmanji Arabic
string kurmanjiArabic = date.ToString("D", KurdishDialect.KurmanjiArabic);
// Output: ١٥ خاکەلێوە ٢٧٢٥

// Hawrami Latin
string hawramiLatin = date.ToString("D", KurdishDialect.HawramiLatin);
// Output: 15 Newroz 2725

// Hawrami Arabic
string hawramiArabic = date.ToString("D", KurdishDialect.HawramiArabic);
// Output: ١٥ نەورۆز ٢٧٢٥

Text Direction Control

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 1, 15);

// Force Left-to-Right (LTR)
string ltr = date.ToString("D", KurdishDialect.SoraniArabic, KurdishTextDirection.LeftToRight);

// Force Right-to-Left (RTL)
string rtl = date.ToString("D", KurdishDialect.SoraniLatin, KurdishTextDirection.RightToLeft);

// Default (auto-detect based on script)
string auto = date.ToString("D", KurdishDialect.SoraniArabic);
// Arabic script defaults to RTL

Date Parsing

Parsing Date Strings

using KurdishCalendar.Core;

// Parse numeric format
KurdishDate date1 = KurdishDate.Parse("15/01/2725", KurdishDialect.SoraniLatin);

// Parse long format with month name
KurdishDate date2 = KurdishDate.Parse("15 Xakelêwe 2725", KurdishDialect.SoraniLatin);

// Parse with abbreviated month
KurdishDate date3 = KurdishDate.Parse("15 Xak 2725", KurdishDialect.SoraniLatin);

// Parse Arabic numerals
KurdishDate date4 = KurdishDate.Parse("١٥/٠١/٢٧٢٥", KurdishDialect.SoraniArabic);

// Parse with Arabic script month names
KurdishDate date5 = KurdishDate.Parse("١٥ خاکەلێوە ٢٧٢٥", KurdishDialect.SoraniArabic);

Safe Parsing with TryParse

using KurdishCalendar.Core;

string input = "15 Xakelêwe 2725";

if (KurdishDate.TryParse(input, KurdishDialect.SoraniLatin, out KurdishDate result))
{
  Console.WriteLine($"Successfully parsed: {result}");
}
else
{
  Console.WriteLine("Failed to parse date");
}

// Parse user input safely
string userInput = Console.ReadLine();
if (KurdishDate.TryParse(userInput, KurdishDialect.SoraniLatin, out KurdishDate userDate))
{
  Console.WriteLine($"You entered: {userDate.ToString("D", KurdishDialect.SoraniLatin)}");
}
else
{
  Console.WriteLine("Invalid date format. Please use: dd/MM/yyyy or dd MonthName yyyy");
}

Date Arithmetic

Adding and Subtracting Time

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 1, 1);

// Add days
KurdishDate tomorrow = date.AddDays(1);
KurdishDate nextWeek = date.AddDays(7);
KurdishDate yesterday = date.AddDays(-1);

// Add months
KurdishDate nextMonth = date.AddMonths(1);
KurdishDate lastMonth = date.AddMonths(-1);
KurdishDate sixMonthsLater = date.AddMonths(6);

// Add years
KurdishDate nextYear = date.AddYears(1);
KurdishDate tenYearsAgo = date.AddYears(-10);

Console.WriteLine($"Original: {date}");
Console.WriteLine($"Tomorrow: {tomorrow}");
Console.WriteLine($"Next month: {nextMonth}");
Console.WriteLine($"Next year: {nextYear}");

Calculating Differences

using KurdishCalendar.Core;

KurdishDate date1 = new KurdishDate(2725, 1, 1);
KurdishDate date2 = new KurdishDate(2725, 6, 15);

// Calculate difference in days
int daysDifference = date2.DaysDifference(date1);
Console.WriteLine($"Days between dates: {daysDifference}");
// Output: Days between dates: 165

// Calculate age in years
KurdishDate birthDate = new KurdishDate(2700, 1, 1);
KurdishDate today = KurdishDate.Today;
int age = today.Year - birthDate.Year;
if (today.Month < birthDate.Month || 
   (today.Month == birthDate.Month && today.Day < birthDate.Day))
{
  age--;
}
Console.WriteLine($"Age: {age} years");

Date Comparisons

Comparison Operators

using KurdishCalendar.Core;

KurdishDate date1 = new KurdishDate(2725, 1, 1);
KurdishDate date2 = new KurdishDate(2725, 6, 15);
KurdishDate date3 = new KurdishDate(2725, 1, 1);

// Equality
bool isEqual = (date1 == date3);        // true
bool isNotEqual = (date1 != date2);     // true

// Comparison
bool isLess = (date1 < date2);          // true
bool isGreater = (date2 > date1);       // true
bool isLessOrEqual = (date1 <= date3);  // true
bool isGreaterOrEqual = (date2 >= date1); // true

// Check if date is in the past
KurdishDate today = KurdishDate.Today;
bool isPast = (date1 < today);

// Check if date is in the future
bool isFuture = (date2 > today);

Practical Comparison Examples

using KurdishCalendar.Core;

// Check if it's someone's birthday
KurdishDate birthDate = new KurdishDate(2700, 3, 15);
KurdishDate today = KurdishDate.Today;

bool isBirthday = (today.Month == birthDate.Month && today.Day == birthDate.Day);

// Check if event has passed
KurdishDate eventDate = new KurdishDate(2725, 6, 1);
bool eventHasPassed = (today > eventDate);

// Check if within date range
KurdishDate startDate = new KurdishDate(2725, 1, 1);
KurdishDate endDate = new KurdishDate(2725, 12, 29);
bool isInRange = (today >= startDate && today <= endDate);

// Find the earlier/later date
KurdishDate earlier = (date1 < date2) ? date1 : date2;
KurdishDate later = (date1 > date2) ? date1 : date2;

Gregorian Integration

Formatting Gregorian Dates with Kurdish Month Names

using KurdishCalendar.Core;
using System;

DateTime gregorianDate = new DateTime(2025, 1, 28);

// Kurmanji Gregorian (Latin)
string kurmanjiLatin = gregorianDate.ToKurmanjiGregorianLong();
// Output: 28 Kanûna Duyê 2025

string kurmanjiShort = gregorianDate.ToKurmanjiGregorianShort();
// Output: 28 Kan Duy 2025

// Kurmanji Gregorian (Arabic)
string kurmanjiArabic = gregorianDate.ToKurmanjiGregorian(
  GregorianKurmanjiFormatter.ScriptType.Arabic
);
// Output: ٢٨ کانوونا دویێ ٢٠٢٥

// Sorani Gregorian (Latin)
string soraniLatin = gregorianDate.ToSoraniGregorianLong();
// Output: 28 Kanûnî Duhem 2025

string soraniShort = gregorianDate.ToSoraniGregorianShort();
// Output: 28 Kan2 2025

// Sorani Gregorian (Arabic)
string soraniArabic = gregorianDate.ToSoraniGregorian(
  GregorianSoraniFormatter.ScriptType.Arabic
);
// Output: ٢٨ كانونى دووەم ٢٠٢٥

Custom Gregorian Formatting

using KurdishCalendar.Core;
using System;

DateTime date = new DateTime(2025, 12, 25);

// Custom format with Kurmanji names
string custom1 = date.ToKurmanjiGregorian(
  GregorianKurmanjiFormatter.ScriptType.Latin,
  "dd MMM yyyy"
);
// Output: 25 Kan Êk 2025

string custom2 = date.ToKurmanjiGregorian(
  GregorianKurmanjiFormatter.ScriptType.Latin,
  "MMMM dd, yyyy"
);
// Output: Kanûna Êkê 25, 2025

// Custom format with Sorani names
string custom3 = date.ToSoraniGregorian(
  GregorianSoraniFormatter.ScriptType.Latin,
  "dd/MM/yyyy"
);
// Output: 25/12/2025

Getting Month Names Directly

using KurdishCalendar.Core;

// Get Kurmanji Gregorian month name
string kurmanjiJanuary = GregorianKurmanjiFormatter.GetMonthName(1);
// Output: Kanûna Duyê

string kurmanjiJanuaryShort = GregorianKurmanjiFormatter.GetMonthName(1, 
  GregorianKurmanjiFormatter.ScriptType.Latin, 
  abbreviated: true
);
// Output: Kan Duy

// Get Sorani Gregorian month name
string soraniJanuary = GregorianSoraniFormatter.GetMonthName(1);
// Output: Kanûnî Duhem

string soraniJanuaryArabic = GregorianSoraniFormatter.GetMonthName(1,
  GregorianSoraniFormatter.ScriptType.Arabic
);
// Output: كانونى دووەم

Astronomical Dates

Using Astronomical Precision

using KurdishCalendar.Core;

// Create astronomical date (uses precise equinox calculation)
KurdishAstronomicalDate astroDate = new KurdishAstronomicalDate(2725, 1, 1);

// Create with specific location
KurdishAstronomicalDate erbilDate = KurdishAstronomicalDate.FromErbil(2725, 1, 1);
KurdishAstronomicalDate tehranDate = KurdishAstronomicalDate.FromTehran(2725, 1, 1);
KurdishAstronomicalDate sulaymaniyahDate = KurdishAstronomicalDate.FromSulaymaniyah(2725, 1, 1);

// Create with custom longitude
KurdishAstronomicalDate customDate = KurdishAstronomicalDate.FromLongitude(
  2725, 1, 1,
  45.4375  // Sulaymaniyah longitude
);

// Convert from Gregorian
DateTime gregorian = new DateTime(2025, 3, 21);
KurdishAstronomicalDate fromGregorian = KurdishAstronomicalDate.FromDateTime(gregorian);

// Get today's astronomical date
KurdishAstronomicalDate today = KurdishAstronomicalDate.Today;

Converting Between Standard and Astronomical

using KurdishCalendar.Core;

// Standard to Astronomical (preserve values)
KurdishDate standard = new KurdishDate(2725, 1, 1);
KurdishAstronomicalDate astro1 = standard.ToAstronomical();

// Standard to Astronomical (recalculate through Gregorian)
KurdishAstronomicalDate astro2 = standard.ToAstronomicalRecalculated();

// Astronomical to Standard (preserve values)
KurdishAstronomicalDate astroDate = new KurdishAstronomicalDate(2725, 1, 1);
KurdishDate standard1 = astroDate.ToStandardDate();

// Astronomical to Standard (recalculate through Gregorian)
KurdishDate standard2 = astroDate.ToStandardDateRecalculated();

Checking Leap Years

using KurdishCalendar.Core;

// Standard leap year (33-year cycle)
KurdishDate standardDate = new KurdishDate(2726, 1, 1);
bool isStandardLeap = standardDate.IsLeapYear;

// Astronomical leap year (based on actual equinox timing)
KurdishAstronomicalDate astroDate = KurdishAstronomicalDate.FromErbil(2726, 1, 1);
bool isAstroLeap = astroDate.IsLeapYear;

Console.WriteLine($"Standard leap: {isStandardLeap}");
Console.WriteLine($"Astronomical leap: {isAstroLeap}");
// Note: These may differ by 1-2 days due to actual equinox variations

Working with Different Dialects

Multilingual Date Display

using KurdishCalendar.Core;

KurdishDate date = new KurdishDate(2725, 1, 15);

// Display in all dialects
var dialects = new[]
{
  KurdishDialect.SoraniLatin,
  KurdishDialect.SoraniArabic,
  KurdishDialect.KurmanjiLatin,
  KurdishDialect.KurmanjiArabic,
  KurdishDialect.HawramiLatin,
  KurdishDialect.HawramiArabic
};

foreach (var dialect in dialects)
{
  string formatted = date.ToString("D", dialect);
  Console.WriteLine($"{dialect}: {formatted}");
}

// Output:
// SoraniLatin: 15 Xakelêwe 2725
// SoraniArabic: ١٥ خاکەلێوە ٢٧٢٥
// KurmanjiLatin: 15 Xakelêwe 2725
// KurmanjiArabic: ١٥ خاکەلێوە ٢٧٢٥
// HawramiLatin: 15 Newroz 2725
// HawramiArabic: ١٥ نەورۆز ٢٧٢٥

User Preference System

using KurdishCalendar.Core;
using System;

// User settings
class UserSettings
{
  public KurdishDialect PreferredDialect { get; set; }
  public bool UseArabicScript { get; set; }
}

// Format dates according to user preference
string FormatDateForUser(KurdishDate date, UserSettings settings)
{
  KurdishDialect dialect = settings.PreferredDialect;
  
  // Adjust for script preference
  if (settings.UseArabicScript)
  {
    dialect = dialect switch
    {
      KurdishDialect.SoraniLatin => KurdishDialect.SoraniArabic,
      KurdishDialect.KurmanjiLatin => KurdishDialect.KurmanjiArabic,
      KurdishDialect.HawramiLatin => KurdishDialect.HawramiArabic,
      _ => dialect
    };
  }
  
  return date.ToString("D", dialect);
}

// Usage
UserSettings user1 = new UserSettings 
{ 
  PreferredDialect = KurdishDialect.SoraniLatin, 
  UseArabicScript = false 
};

UserSettings user2 = new UserSettings 
{ 
  PreferredDialect = KurdishDialect.KurmanjiLatin, 
  UseArabicScript = true 
};

KurdishDate date = KurdishDate.Today;
Console.WriteLine($"User 1: {FormatDateForUser(date, user1)}");
Console.WriteLine($"User 2: {FormatDateForUser(date, user2)}");

Advanced Examples

Birthday Calculator

using KurdishCalendar.Core;
using System;

public class BirthdayCalculator
{
  public static int CalculateAge(KurdishDate birthDate)
  {
    KurdishDate today = KurdishDate.Today;
    int age = today.Year - birthDate.Year;
    
    // Subtract 1 if birthday hasn't occurred yet this year
    if (today.Month < birthDate.Month || 
       (today.Month == birthDate.Month && today.Day < birthDate.Day))
    {
      age--;
    }
    
    return age;
  }
  
  public static int DaysUntilBirthday(KurdishDate birthDate)
  {
    KurdishDate today = KurdishDate.Today;
    KurdishDate nextBirthday = new KurdishDate(
      today.Year, 
      birthDate.Month, 
      birthDate.Day
    );
    
    // If birthday has passed this year, use next year
    if (nextBirthday < today)
    {
      nextBirthday = new KurdishDate(
        today.Year + 1,
        birthDate.Month,
        birthDate.Day
      );
    }
    
    return nextBirthday.DaysDifference(today);
  }
}

// Usage
KurdishDate birthDate = new KurdishDate(2700, 6, 15);
int age = BirthdayCalculator.CalculateAge(birthDate);
int daysUntil = BirthdayCalculator.DaysUntilBirthday(birthDate);

Console.WriteLine($"Age: {age} years");
Console.WriteLine($"Days until next birthday: {daysUntil}");

Date Range Iterator

using KurdishCalendar.Core;
using System.Collections.Generic;

public static class DateRangeExtensions
{
  public static IEnumerable GetDateRange(
    KurdishDate start, 
    KurdishDate end)
  {
    KurdishDate current = start;
    while (current <= end)
    {
      yield return current;
      current = current.AddDays(1);
    }
  }
}

// Usage
KurdishDate start = new KurdishDate(2725, 1, 1);
KurdishDate end = new KurdishDate(2725, 1, 7);

Console.WriteLine("First week of the year:");
foreach (var date in DateRangeExtensions.GetDateRange(start, end))
{
  string dayName = KurdishCultureInfo.GetDayName(
    date.DayOfWeek, 
    KurdishDialect.SoraniLatin
  );
  Console.WriteLine($"{date.ToString("D", KurdishDialect.SoraniLatin)} - {dayName}");
}

For more examples and documentation, see: