7 releases
0.1.7 | Oct 29, 2024 |
---|---|
0.1.6 | Jul 1, 2024 |
0.1.5 | Jun 17, 2024 |
0.1.4 | Jan 18, 2024 |
0.1.1 | Jan 26, 2023 |
#95 in Date and time
119 downloads per month
48KB
822 lines
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 thetime
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 thetime
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(())
}
Dependencies
~1–1.4MB
~30K SLoC