zemen

Crates.iozemen
lib.rszemen
version0.1.7
sourcesrc
created_at2023-01-22 20:36:37.332896
updated_at2024-10-29 17:27:48.503829
descriptionEthiopian to Gregorian conversion utility
homepage
repositoryhttps://github.com/omer-biz/zemen/
max_upload_size
id765372
size49,161
Omer Abdulaziz (omer-biz)

documentation

README

Zemen - የ ኢትዮጵያ ቀን መቁጠሪያ

[!WARNING] I've recently discovered a bug that may impact its accuracy The Zemen::today function doesn't properly return the current date when the time feature is disabled. At this time, I'm unable to resolve the issue immediately. I encourage users to submit a pull request if they’re interested in contributing a fix. In the meantime, you may want to explore alternative crates that provide similar functionality or use the crate with the time feature turned on.

Thank you for your understanding and support! I’ll update this message as soon as a resolution is available.

Introduction

A date conversion crate to convert between ethiopian and gregorian dates. We have a custom struct to represent ethiopian date, i.e. Zemen, and we are using an external crate time, and specifically time::Date, to represent gregorian dates.

The crate uses the Beyene-Kudlek algorithm to convert between jdn (Julian Day number) and ethiopic calender. And the time crate to convert between jdn (Julian Day number) and gregorian date.

Docs found here

Installation

cargo add zemen

Usage

use time::{Date, Month};
use zemen::{Zemen, Werh};
use zemen::error;

fn main() -> Result<(), error::Error> {
  // creating dates
  // Werh means month in Ge'ez
  let qen = Zemen::from_eth_cal(1992, Werh::Tahasass, 22)?;
  let date = Date::from_calendar_date(2000, Month::January, 1)?;

  // conversion
  let converted_day = Date::from(&qen);
  let converted_qen = Zemen::from(&date);

  println!("date: {}", converted_day);
  println!("qen: {}", converted_qen);

  // accessing individual element
  println!("year: {}", qen.year());
  println!("month: {}", qen.month());
  println!("month(number): {}", qen.month() as u8);
  println!("day: {}", qen.day());

  // get the next, and previous date. `next` and `previous` consume `self`
  let nege = qen.next();
  println!("nege: {}", nege);
  let tilant = nege.previous().previous();
  println!("tilant: {}", tilant);

  // get the next month
  let qetay_wer = tilant.month().next();
  println!("wer: {}", qetay_wer);

  // get the previous month
  let yalef_wer = tilant.month().previous();
  println!("wer: {}", yalef_wer);
  Ok(())
}

Formatting

use zemen::*;
fn main() -> Result<(), error::Error> {
  let qen = Zemen::from_eth_cal(2015, Werh::Tir, 10)?;
  let formatted = qen.format("ዛሬ DD, MMM D-YYYY ነው");

  // prints: ዛሬ ረቡዕ, ጥር 10-2015 ነው
  println!("{}", formatted);
  Ok(())
}
Commit count: 38

cargo fmt