Most date libraries assume the world runs on one calendar. But what if yours is different? This challenge faced a developer building the «Zemen» App in Flutter. What this means for you is a clear path for developers to create apps that support diverse calendar systems, like the Ethiopian one, reaching a wider global user base.

The «Zemen» App is a unique, 100% offline Ethiopian calendar converter. It handles conversions between Ethiopian and Gregorian calendars, tracking national holidays like Enkutatash, Meskel, and Timkat. It also includes a full database of Orthodox Tewahedo fasting days, all without any network calls.

At the app's core is a small, self-contained calendar engine written in Dart. This engine converts dates both ways using exact integer math. It precisely models the 13-month Ethiopian year, including its leap year rules, and is covered by anchor-based tests.

The Ethiopian calendar has 13 months: twelve of 30 days each, then Pagume, a short 13th month with 5 days (or 6 in a leap year). A leap year is divisible by 4, matching the Julian calendar. The new year, Enkutatash, falls on September 11 in most years (or September 12 before a Gregorian leap year). It runs roughly seven to eight years behind the Gregorian calendar – for instance, in October 2026, it was 2019 in Ethiopia.

This regularity simplifies the engine: every month except Pagume has a fixed length. Instead of direct conversion, the app uses a neutral pivot: the Julian Day Number (JDN), counting days since a fixed astronomical epoch. The process is: Ethiopian date → JDN → Gregorian date, and vice versa. Each direction is a pure function, making the code trivially testable. The Ethiopian epoch (1 Meskerem 1 EE) corresponds to JDN 1724221. This approach adapts to any non-Gregorian calendar.