{"id":36967332,"url":"https://github.com/rojcode/kurdical","last_synced_at":"2026-01-13T20:02:30.298Z","repository":{"id":328829184,"uuid":"1116910503","full_name":"rojcode/kurdical","owner":"rojcode","description":"A comprehensive Go module for converting between Gregorian and Kurdish calendars, supporting two historical epochs (Median Kingdom and Fall of Nineveh) with authentic month names in 5 Kurdish dialects (Sorani, Kurmanji, Laki, Hawrami, Kalhuri).","archived":false,"fork":false,"pushed_at":"2025-12-16T01:47:59.000Z","size":32,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-18T21:07:59.877Z","etag":null,"topics":["calendar","go","kurdish","kurdish-calendar","kurmanji","sorani"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rojcode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-15T14:56:41.000Z","updated_at":"2025-12-16T01:48:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rojcode/kurdical","commit_stats":null,"previous_names":["rojcode/kurdical"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rojcode/kurdical","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rojcode%2Fkurdical","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rojcode%2Fkurdical/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rojcode%2Fkurdical/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rojcode%2Fkurdical/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rojcode","download_url":"https://codeload.github.com/rojcode/kurdical/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rojcode%2Fkurdical/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28399058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calendar","go","kurdish","kurdish-calendar","kurmanji","sorani"],"created_at":"2026-01-13T20:02:29.468Z","updated_at":"2026-01-13T20:02:30.292Z","avatar_url":"https://github.com/rojcode.png","language":"Go","readme":"# kurdical\n\n[![Go](https://github.com/rojcode/kurdical/actions/workflows/go.yml/badge.svg)](https://github.com/rojcode/kurdical/actions/workflows/go.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/rojcode/kurdical)](https://goreportcard.com/report/github.com/rojcode/kurdical) [![Go Version](https://img.shields.io/badge/go-%3E%3D1.20-blue)](https://golang.org/dl/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## About the Kurdish Calendar\n\nThe Kurdish calendar is an independent solar calendar system with historical offsets aligned to significant events in Kurdish history.\n\nIt supports two main historical epochs:\n\n- **Median Kingdom (Diako) epoch**: Starting from the establishment of the Median kingdom by Diako\n- **Fall of Nineveh (Cyaxares) epoch**: Starting from the fall of Nineveh by Cyaxares\n\nThe Kurdish year is calculated by adding epoch-specific offsets to the base solar calendar year.\n\n## Features\n\n- Convert Gregorian dates to Kurdish calendar\n- Convert Kurdish calendar dates back to Gregorian\n- Support for two historical epochs (Median Kingdom and Fall of Nineveh)\n- Month names in 5 Kurdish dialects: Laki, Hawrami, Sorani, Kalhuri, Kurmanji\n- Display weekdays in Kurdish\n- Format dates with Kurdish digits (٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩)\n- Error handling and date validation\n- 100% test coverage\n- Complete documentation with practical examples\n\n## Installation\n\n```bash\ngo get github.com/rojcode/kurdical\n```\n\n## Usage\n\n### 1. Basic Gregorian to Kurdish Conversion\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"time\"\n    \"github.com/rojcode/kurdical\"\n)\n\nfunc main() {\n    t := time.Date(2023, 3, 21, 0, 0, 0, 0, time.UTC)\n    k := kurdical.GregorianToKurdish(t, kurdical.Sorani, kurdical.MedianKingdom)\n    fmt.Printf(\"Kurdish date: %d-%d-%d %s\\n\", k.Year, k.Month, k.Day, k.MonthName)\n    // Output: Kurdish date: 2723-1-1 خاکه‌لێوه\n}\n```\n\n### 2. Round Trip Conversion\n\n```go\ng, err := kurdical.KurdishToGregorian(k)\nif err != nil {\n    fmt.Println(err)\n} else {\n    fmt.Printf(\"Gregorian date: %s\\n\", g.Format(\"2006-01-02\"))\n    // Output: Gregorian date: 2023-03-21\n}\n```\n\n### 3. Different Kurdish Dialects\n\n```go\n// Sorani dialect\nkSorani := kurdical.GregorianToKurdish(t, kurdical.Sorani, kurdical.MedianKingdom)\nfmt.Printf(\"Sorani: %s\\n\", kSorani.MonthName) // خاکه‌لێوه\n\n// Kurmanji dialect\nkKurmanji := kurdical.GregorianToKurdish(t, kurdical.Kurmanji, kurdical.MedianKingdom)\nfmt.Printf(\"Kurmanji: %s\\n\", kKurmanji.MonthName) // نیسان\n\n// Laki dialect\nkLaki := kurdical.GregorianToKurdish(t, kurdical.Laki, kurdical.MedianKingdom)\nfmt.Printf(\"Laki: %s\\n\", kLaki.MonthName) // په‌نجه\n\n// Hawrami dialect\nkHawrami := kurdical.GregorianToKurdish(t, kurdical.Hawrami, kurdical.MedianKingdom)\nfmt.Printf(\"Hawrami: %s\\n\", kHawrami.MonthName) // نه‌ورۆز\n\n// Kalhuri dialect\nkKalhuri := kurdical.GregorianToKurdish(t, kurdical.Kalhuri, kurdical.MedianKingdom)\nfmt.Printf(\"Kalhuri: %s\\n\", kKalhuri.MonthName) // جه‌ژنان (جه‌شنان)\n```\n\n### 4. Different Historical Epochs\n\n```go\n// Median Kingdom epoch\nkMedian := kurdical.GregorianToKurdish(t, kurdical.Sorani, kurdical.MedianKingdom)\nfmt.Printf(\"Median Kingdom: %d\\n\", kMedian.Year) // 2723\n\n// Fall of Nineveh epoch\nkNineveh := kurdical.GregorianToKurdish(t, kurdical.Sorani, kurdical.FallOfNineveh)\nfmt.Printf(\"Fall of Nineveh: %d\\n\", kNineveh.Year) // 2635\n```\n\n### 5. Weekday Display\n\n```go\nfmt.Printf(\"Weekday: %s\\n\", kurdical.WeekdayNames[k.Weekday])\n// Output: Weekday: سێ‌شەممە\n```\n\n### 6. Formatting with Kurdish Digits\n\n```go\nformatted, err := k.KFormat(\"2006-01-02 January\")\nif err != nil {\n    fmt.Println(\"Error:\", err)\n} else {\n    fmt.Printf(\"Formatted: %s\\n\", formatted)\n    // Output: Formatted: ٢٧٢٣-٠١-٠١ خاکه‌لێوه\n}\n```\n\n### 7. Using Date-Only Functions\n\n```go\nk := kurdical.GregorianToKurdishDate(2023, 3, 21, kurdical.Sorani, kurdical.MedianKingdom)\nfmt.Printf(\"Kurdish: %d-%d-%d %s\\n\", k.Year, k.Month, k.Day, k.MonthName)\n```\n\n### 8. Converting Kurdish to Gregorian\n\n```go\ngy, gm, gd, err := kurdical.KurdishToGregorianDate(k.Year, k.Month, k.Day, k.Epoch)\nif err != nil {\n    fmt.Println(\"Error:\", err)\n} else {\n    fmt.Printf(\"Gregorian: %d-%d-%d\\n\", gy, gm, gd)\n}\n```\n\n### 9. Creating Kurdish Date Manually\n\n```go\nspecificKurdish := kurdical.KurdishDate{\n    Year:    2725,\n    Month:   9,\n    Day:     24,\n    Dialect: kurdical.Sorani,\n    Epoch:   kurdical.MedianKingdom,\n}\ngregorianSpecific, err := kurdical.KurdishToGregorian(specificKurdish)\nif err != nil {\n    fmt.Println(\"Error:\", err)\n} else {\n    fmt.Printf(\"Kurdish 2725-09-24 to Gregorian: %s\\n\", gregorianSpecific.Format(\"2006-01-02\"))\n}\n```\n\n### 10. Invalid Month Error Handling\n\n```go\n// Invalid month\ninvalidKurdish := kurdical.KurdishDate{\n    Year:  2725,\n    Month: 13, // Invalid month\n    Day:   24,\n    Epoch: kurdical.MedianKingdom,\n}\n_, err := kurdical.KurdishToGregorian(invalidKurdish)\nif err != nil {\n    fmt.Printf(\"Error: %s\\n\", err) // Error: invalid month: 13\n}\n```\n\n### 11. Invalid Day Error Handling\n\n```go\n// Invalid day\ninvalidDay := kurdical.KurdishDate{\n    Year:  2725,\n    Month: 1,\n    Day:   32, // Invalid day\n    Epoch: kurdical.MedianKingdom,\n}\n_, err := kurdical.KurdishToGregorian(invalidDay)\nif err != nil {\n    fmt.Printf(\"Error: %s\\n\", err) // Error: invalid day: 32 for month 1 in year 2725\n}\n```\n\n### 12. Different Dates of Year\n\n```go\n// January date\njanDate := kurdical.GregorianToKurdishDate(2023, 1, 1, kurdical.Sorani, kurdical.MedianKingdom)\nfmt.Printf(\"January: %d-%d-%d %s\\n\", janDate.Year, janDate.Month, janDate.Day, janDate.MonthName)\n\n// December date\ndecDate := kurdical.GregorianToKurdishDate(2023, 12, 31, kurdical.Sorani, kurdical.MedianKingdom)\nfmt.Printf(\"December: %d-%d-%d %s\\n\", decDate.Year, decDate.Month, decDate.Day, decDate.MonthName)\n```\n\n### 13. Comparing Epochs\n\n```go\ndate := time.Date(2023, 6, 15, 0, 0, 0, 0, time.UTC)\n\nmedian := kurdical.GregorianToKurdish(date, kurdical.Sorani, kurdical.MedianKingdom)\nnineveh := kurdical.GregorianToKurdish(date, kurdical.Sorani, kurdical.FallOfNineveh)\n\nfmt.Printf(\"Median Kingdom: %d-%d-%d\\n\", median.Year, median.Month, median.Day)\nfmt.Printf(\"Fall of Nineveh: %d-%d-%d\\n\", nineveh.Year, nineveh.Month, nineveh.Day)\nfmt.Printf(\"Year difference: %d\\n\", median.Year - nineveh.Year) // 88\n```\n\n### 14. Different Format Layouts\n\n```go\nlayouts := []string{\n    \"2006-01-02\",\n    \"2006/01/02 January\",\n    \"02 Jan 2006\",\n    \"Monday, 02 January 2006\",\n}\n\nfor _, layout := range layouts {\n    formatted, _ := k.KFormat(layout)\n    fmt.Printf(\"Format %s: %s\\n\", layout, formatted)\n}\n```\n\n### 15. Complete Program Example\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"time\"\n    \"github.com/rojcode/kurdical\"\n)\n\nfunc main() {\n    // Current date\n    now := time.Now()\n    kurdishNow := kurdical.GregorianToKurdish(now, kurdical.Sorani, kurdical.MedianKingdom)\n\n    fmt.Printf(\"Current Gregorian: %s\\n\", now.Format(\"2006-01-02 15:04:05\"))\n    fmt.Printf(\"Current Kurdish: %d-%d-%d %s (%s)\\n\",\n        kurdishNow.Year, kurdishNow.Month, kurdishNow.Day,\n        kurdishNow.MonthName, kurdical.WeekdayNames[kurdishNow.Weekday])\n\n    // Convert to specific Kurdish date\n    newYearKurdish := kurdical.KurdishDate{\n        Year:  2726,\n        Month: 1,\n        Day:   1,\n        Epoch: kurdical.MedianKingdom,\n    }\n    newYearGregorian, _ := kurdical.KurdishToGregorian(newYearKurdish)\n    fmt.Printf(\"Kurdish New Year 2726: %s\\n\", newYearGregorian.Format(\"2006-01-02\"))\n}\n```\n\n## API\n\n### Types\n\n- `Dialect`: Enum for Kurdish dialects (Laki, Hawrami, Sorani, Kalhuri, Kurmanji)\n- `Epoch`: Enum for historical epochs (MedianKingdom, FallOfNineveh)\n- `KurdishDate`: Struct representing a date in the Kurdish calendar\n\n### Functions\n\n- `GregorianToKurdish(t time.Time, dialect Dialect, epoch Epoch) KurdishDate`\n- `GregorianToKurdishDate(year, month, day int, dialect Dialect, epoch Epoch) KurdishDate`\n- `KurdishToGregorian(k KurdishDate) (time.Time, error)`\n- `KurdishToGregorianDate(kYear, kMonth, kDay int, epoch Epoch) (int, int, int, error)`\n- `(k KurdishDate) KFormat(layout string) (string, error)`: Formats the Kurdish date using Go time layout strings with Kurdish digits\n\n## Kurdish Calendar Details\n\nThe Kurdish calendar uses epoch-specific historical adjustments:\n\n- Median Kingdom epoch: Kurdish year = Base year + 1321\n- Fall of Nineveh epoch: Kurdish year = Base year + 1233\n\n## Cultural Notes\n\nThis module respects Kurdish cultural heritage by providing accurate month names in authentic dialects. UTF-8 encoding ensures proper display of Kurdish characters.\n\n## License\n\nSee LICENSE file.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frojcode%2Fkurdical","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frojcode%2Fkurdical","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frojcode%2Fkurdical/lists"}