6 个版本

0.1.6 2024年7月1日
0.1.5 2024年6月17日
0.1.4 2024年1月18日
0.1.3 2023年2月20日
0.1.1 2023年1月26日

#90日期和时间

Download history 159/week @ 2024-04-26 1/week @ 2024-05-03 115/week @ 2024-06-14 15/week @ 2024-06-21 194/week @ 2024-06-28 16/week @ 2024-07-05 53/week @ 2024-07-26 6/week @ 2024-08-02

每月 59 次下载

MIT 许可证

48KB
822 代码行

Zemen - 埃塞俄比亚日期库

简介

一个日期转换库,用于在埃塞俄比亚历和公历之间转换日期。我们有一个自定义的 struct 来表示埃塞俄比亚日期,即 Zemen,我们使用外部库 time,特别是 time::Date,来表示公历日期。

该库使用 Beyene-Kudlek 算法在 jdn(儒略日数)和埃塞俄比亚日历之间进行转换。并且使用 time 库在 jdn(儒略日数)和公历日期之间进行转换。

文档在此找到

安装

cargo add zemen

用法

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(())
}

格式化

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(())
}

依赖项

~1–1.5MB
~31K SLoC