Skip to content

Date Formatting Guide

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

Date Formatting Guide

Complete guide to formatting Kurdish dates with standard and custom format strings.

Table of Contents


Standard Format Strings

The library supports standard .NET-style format strings.

Short Date Format: "d"

KurdishDate date = new KurdishDate(2725, 1, 15);
string shortDate = date.ToString("d");
// Output: 15/01/2725

Format: dd/MM/yyyy
Usage: Compact date representation, good for tables and data entry

Long Date Format: "D"

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

Format: dd MonthName yyyy
Usage: User-friendly display, reports, headers

Month Day Format: "M" or "m"

KurdishDate date = new KurdishDate(2725, 1, 15);
string monthDay = date.ToString("M", KurdishDialect.SoraniLatin);
// Output: 15 Xakelêwe

Format: dd MonthName
Usage: Displaying dates without year (birthdays, anniversaries)

Year Month Format: "Y" or "y"

KurdishDate date = new KurdishDate(2725, 1, 15);
string yearMonth = date.ToString("Y", KurdishDialect.SoraniLatin);
// Output: Xakelêwe 2725

Format: MonthName yyyy
Usage: Month headers, period selectors

Full Date Short Time: "f"

KurdishDate date = new KurdishDate(2725, 1, 15);
string fullShort = date.ToString("f", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725

Format: DayName, dd MonthName yyyy
Usage: Event dates, calendar entries

Full Date Long Time: "F"

KurdishDate date = new KurdishDate(2725, 1, 15);
string fullLong = date.ToString("F", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725

Format: DayName, dd MonthName yyyy
Usage: Formal date display, certificates


Custom Format Strings

Create custom formats using format tokens.

Basic Custom Formats

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

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

// Dash separated
string format2 = date.ToString("yyyy-MM-dd", KurdishDialect.SoraniLatin);
// Output: 2725-06-15

// With full month name
string format3 = date.ToString("d MMMM yyyy", KurdishDialect.SoraniLatin);
// Output: 15 Xermanan 2725

// With abbreviated month
string format4 = date.ToString("dd MMM yy", KurdishDialect.SoraniLatin);
// Output: 15 Xer 25

// Month first (US style)
string format5 = date.ToString("MMMM dd, yyyy", KurdishDialect.SoraniLatin);
// Output: Xermanan 15, 2725

With Day Names

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

// Full day name with date
string format1 = date.ToString("dddd, dd MMMM yyyy", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xermanan 2725

// Abbreviated day name
string format2 = date.ToString("ddd, dd MMM yy", KurdishDialect.SoraniLatin);
// Output: Yek, 15 Xer 25

// Day name only
string format3 = date.ToString("dddd", KurdishDialect.SoraniLatin);
// Output: YekŞemme

Literal Text in Formats

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

// Using quotes for literals
string format1 = date.ToString("'Day' dd 'of' MMMM, yyyy", KurdishDialect.SoraniLatin);
// Output: Day 15 of Xermanan, 2725

// Escaped characters
string format2 = date.ToString("dd\\/MM\\/yyyy", KurdishDialect.SoraniLatin);
// Output: 15/06/2725

Format Tokens Reference

Day Tokens

Token Description Example
d Day without leading zero 5, 15, 25
dd Day with leading zero 05, 15, 25
ddd Abbreviated day name Yek, Du, Sê
dddd Full day name YekŞemme, DuŞemme

Month Tokens

Token Description Example
M Month number without leading zero 1, 6, 12
MM Month number with leading zero 01, 06, 12
MMM Abbreviated month name Xak, Xer, ReŞ
MMMM Full month name Xakelêwe, Xermanan

Year Tokens

Token Description Example
yy Two-digit year 25, 26, 27
yyyy Four-digit year 2725, 2726

Special Characters

Character Usage
/ Date separator (literal)
- Date separator (literal)
' ' Space (literal)
'text' Literal text enclosed in quotes
\ Escape next character

Text Direction

Control the text direction for Right-to-Left (RTL) or Left-to-Right (LTR) display.

Default Behavior

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

// Arabic scripts default to RTL
string arabicDefault = date.ToString("d", KurdishDialect.SoraniArabic);
// Displays: ٢٧٢٥/٠١/١٥ (RTL order: year/month/day)

// Latin scripts default to LTR
string latinDefault = date.ToString("d", KurdishDialect.SoraniLatin);
// Displays: 15/01/2725 (LTR order: day/month/year)

Explicit Direction Control

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

// Force LTR on Arabic script
string arabicLTR = date.ToString("d", 
  KurdishDialect.SoraniArabic, 
  KurdishTextDirection.LeftToRight
);

// Force RTL on Latin script
string latinRTL = date.ToString("d",
  KurdishDialect.SoraniLatin,
  KurdishTextDirection.RightToLeft
);

When to Use Direction Control

Use LTR when:

  • Mixing with English/Latin text
  • Database/file formats expecting LTR
  • Technical documentation

Use RTL when:

  • Full Arabic/Kurdish text documents
  • Traditional Kurdish manuscripts
  • User interfaces in Arabic script

Dialect-Specific Formatting

Sorani Latin

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

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

string format2 = date.ToString("dddd, dd MMMM yyyy", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725

string format3 = date.ToString("dd MMM yy", KurdishDialect.SoraniLatin);
// Output: 15 Xak 25

Sorani Arabic

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

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

string format2 = date.ToString("dd/MM/yyyy", KurdishDialect.SoraniArabic);
// Output: ١٥/٠١/٢٧٢٥

string format3 = date.ToString("dddd، dd MMMM yyyy", KurdishDialect.SoraniArabic);
// Output: یەکشەممە، ١٥ خاکەلێوە ٢٧٢٥

Kurmanji

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

// 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

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

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

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

Gregorian Dialects

using System;

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

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

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

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

Number Formatting

Arabic-Indic Numerals

Arabic script dialects automatically use Arabic-Indic numerals (٠-٩).

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

// Western numerals (Latin scripts)
string latin = date.ToString("dd/MM/yyyy", KurdishDialect.SoraniLatin);
// Output: 15/01/2725

// Arabic-Indic numerals (Arabic scripts)
string arabic = date.ToString("dd/MM/yyyy", KurdishDialect.SoraniArabic);
// Output: ١٥/٠١/٢٧٢٥

Numeral Conversion Table

Western Arabic-Indic
0 ٠
1 ١
2 ٢
3 ٣
4 ٤
5 ٥
6 ٦
7 ٧
8 ٨
9 ٩

Manual Number Formatting

// Format a number according to dialect
int number = 2725;

string western = KurdishCultureInfo.FormatNumber(number, KurdishDialect.SoraniLatin);
// Output: 2725

string arabicIndic = KurdishCultureInfo.FormatNumber(number, KurdishDialect.SoraniArabic);
// Output: ٢٧٢٥

Examples by Use Case

Calendar Display

// Day header for calendar
KurdishDate date = new KurdishDate(2725, 6, 15);
string dayHeader = date.ToString("ddd dd", KurdishDialect.SoraniLatin);
// Output: Yek 15

// Month header
string monthHeader = date.ToString("MMMM yyyy", KurdishDialect.SoraniLatin);
// Output: Xermanan 2725

// Full calendar entry
string calendarEntry = date.ToString("dddd, dd MMMM", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xermanan

Data Entry Forms

// Placeholder text for input field
string placeholder = "dd/MM/yyyy";

// Validation message
KurdishDate example = new KurdishDate(2725, 1, 1);
string validationMsg = $"Example: {example.ToString("dd/MM/yyyy")}";
// Output: Example: 01/01/2725

// Display entered date
KurdishDate userDate = new KurdishDate(2725, 6, 15);
string display = userDate.ToString("D", KurdishDialect.SoraniLatin);
// Output: 15 Xermanan 2725

Reports and Documents

// Report header
KurdishDate reportDate = KurdishDate.Today;
string header = reportDate.ToString("dddd, dd MMMM yyyy", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xermanan 2725

// Document footer
string footer = $"Generated on {reportDate.ToString("dd MMM yyyy", KurdishDialect.SoraniLatin)}";
// Output: Generated on 15 Xer 2725

// Date range
KurdishDate startDate = new KurdishDate(2725, 1, 1);
KurdishDate endDate = new KurdishDate(2725, 12, 29);
string range = $"{startDate.ToString("dd MMM")} - {endDate.ToString("dd MMM yyyy", KurdishDialect.SoraniLatin)}";
// Output: 01 Xak - 29 ReŞ 2725

Email and Notifications

// Email subject date
KurdishDate date = new KurdishDate(2725, 6, 15);
string emailDate = date.ToString("MMM dd, yyyy", KurdishDialect.SoraniLatin);
// Output: Xer 15, 2725

// Notification timestamp
string notification = $"Received on {date.ToString("dd MMMM", KurdishDialect.SoraniLatin)}";
// Output: Received on 15 Xermanan

// Reminder format
string reminder = $"Reminder: {date.ToString("dddd, MMMM dd", KurdishDialect.SoraniLatin)}";
// Output: Reminder: YekŞemme, Xermanan 15

Bilingual Display

KurdishDate date = new KurdishDate(2725, 6, 15);
DateTime gregorian = date.ToDateTime();

// Kurdish / Gregorian
string bilingual = $"{date.ToString("D", KurdishDialect.SoraniLatin)} / {gregorian:MMMM dd, yyyy}";
// Output: 15 Xermanan 2725 / July 06, 2025

// Sorani / Kurmanji
string multiDialect = $"{date.ToString("D", KurdishDialect.SoraniLatin)} ({date.ToString("D", KurdishDialect.HawramiLatin)})";
// Output: 15 Xermanan 2725 (15 Awewere 2725)

Database Storage

// ISO-like format for storage
KurdishDate date = new KurdishDate(2725, 6, 15);
string dbFormat = date.ToString("yyyy-MM-dd");
// Output: 2725-06-15

// Sortable format
string sortable = $"{date.Year:D4}{date.Month:D2}{date.Day:D2}";
// Output: 27250615

// JSON serialization format
string json = $"{{\"year\":{date.Year},\"month\":{date.Month},\"day\":{date.Day}}}";
// Output: {"year":2725,"month":6,"day":15}

Best Practices

1. Choose Appropriate Format

  • Short formats (d, dd/MM/yyyy) for data entry and tables
  • Long formats (D, dd MMMM yyyy) for user-facing displays
  • With day names for calendars and event listings

2. Be Consistent

Use the same format throughout your application for similar contexts:

// Good: Consistent format
string date1 = date.ToString("dd MMM yyyy", dialect);
string date2 = otherDate.ToString("dd MMM yyyy", dialect);

// Avoid: Mixing formats
string date1 = date.ToString("dd MMM yyyy", dialect);
string date2 = otherDate.ToString("MMMM dd, yyyy", dialect);

3. Consider Your Audience

  • Use Sorani for Iraqi/Iranian Kurdistan
  • Use Kurmanji for Turkish/Syrian Kurdistan
  • Use Hawrami for Hawraman region
  • Use Gregorian formats when mixing with international dates

4. Test with Different Dialects

// Test your format with all relevant dialects
var dialects = new[] { 
  KurdishDialect.SoraniLatin, 
  KurdishDialect.SoraniArabic 
};

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

5. Handle Text Direction

For web applications, wrap Arabic script dates in appropriate HTML:

٢٧٢٥/٠١/١٥


15/01/2725

For more examples, see Code Examples.

Clone this wiki locally