-
Notifications
You must be signed in to change notification settings - Fork 0
Date Formatting Guide
Complete guide to formatting Kurdish dates with standard and custom format strings.
- Standard Format Strings
- Custom Format Strings
- Format Tokens Reference
- Text Direction
- Dialect-Specific Formatting
- Number Formatting
- Examples by Use Case
The library supports standard .NET-style format strings.
KurdishDate date = new KurdishDate(2725, 1, 15);
string shortDate = date.ToString("d");
// Output: 15/01/2725Format: dd/MM/yyyy
Usage: Compact date representation, good for tables and data entry
KurdishDate date = new KurdishDate(2725, 1, 15);
string longDate = date.ToString("D", KurdishDialect.SoraniLatin);
// Output: 15 Xakelêwe 2725Format: dd MonthName yyyy
Usage: User-friendly display, reports, headers
KurdishDate date = new KurdishDate(2725, 1, 15);
string monthDay = date.ToString("M", KurdishDialect.SoraniLatin);
// Output: 15 XakelêweFormat: dd MonthName
Usage: Displaying dates without year (birthdays, anniversaries)
KurdishDate date = new KurdishDate(2725, 1, 15);
string yearMonth = date.ToString("Y", KurdishDialect.SoraniLatin);
// Output: Xakelêwe 2725Format: MonthName yyyy
Usage: Month headers, period selectors
KurdishDate date = new KurdishDate(2725, 1, 15);
string fullShort = date.ToString("f", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725Format: DayName, dd MonthName yyyy
Usage: Event dates, calendar entries
KurdishDate date = new KurdishDate(2725, 1, 15);
string fullLong = date.ToString("F", KurdishDialect.SoraniLatin);
// Output: YekŞemme, 15 Xakelêwe 2725Format: DayName, dd MonthName yyyy
Usage: Formal date display, certificates
Create custom formats using format tokens.
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, 2725KurdishDate 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ŞemmeKurdishDate 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| 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 |
| 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 |
| Token | Description | Example |
|---|---|---|
yy |
Two-digit year | 25, 26, 27 |
yyyy |
Four-digit year | 2725, 2726 |
| Character | Usage |
|---|---|
/ |
Date separator (literal) |
- |
Date separator (literal) |
' ' |
Space (literal) |
'text' |
Literal text enclosed in quotes |
\ |
Escape next character |
Control the text direction for Right-to-Left (RTL) or Left-to-Right (LTR) display.
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)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
);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
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 25KurdishDate 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: یەکشەممە، ١٥ خاکەلێوە ٢٧٢٥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: ١٥ خاکەلێوە ٢٧٢٥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: ١٥ نەورۆز ٢٧٢٥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: ٢٨ كانونى دووەم ٢٠٢٥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: ١٥/٠١/٢٧٢٥| Western | Arabic-Indic |
|---|---|
| 0 | ٠ |
| 1 | ١ |
| 2 | ٢ |
| 3 | ٣ |
| 4 | ٤ |
| 5 | ٥ |
| 6 | ٦ |
| 7 | ٧ |
| 8 | ٨ |
| 9 | ٩ |
// 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: ٢٧٢٥// 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// 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// 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 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 15KurdishDate 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)// 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}-
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
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);- 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
// 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}");
}For web applications, wrap Arabic script dates in appropriate HTML:
٢٧٢٥/٠١/١٥
15/01/2725For more examples, see Code Examples.