1 个不稳定版本

0.0.1 2022年8月11日

#9 in #prayer

LGPL-3.0

99KB
2.5K SLoC

Salati

Salati 是一个 Rust 语言编写的程序,根据最新的科学研究计算祷告时间。

免责声明 本存储库中的代码主要来自 salah。通常,我会向其他存储库提交一个 PR,但由于我在某些地方做了许多有争议的更改,我决定创建一个新的存储库。

原因

创建新存储库的主要动机如下

  • Web Assembly 支持:计划将其集成到 muslim-box
  • 对用户假设/调整:当我使用第三方应用程序/库时,我的主要担忧是不知道假设/修正/调整,这让我在祷告时间上感到困惑。请注意,我们依赖这些信息来知道伊姆萨克、开斋和祷告结束时间。
  • 对祷告时间计算有更多控制权
    • 使用哪个黄昏时间来计算伊沙时间?
    • 如何计算极圈地区的祷告时间?

使用方法

将以下内容添加到您的 Cargo.toml 文件中的

[dependencies]
salah = "0.0.0"

要获取祷告时间,请执行以下操作

use salati::prelude::*;

const tunis = Coordinates::new(36.8065, 10.1815);
const date  = Utc.ymd(2022, 8, 1);
const params = ParametersBuilder::with(Method::Tunisia, Madhab::Shafi);
const prayers = PrayerTimes::new(date, coordinates, params);

println!("fajr: {}", prayers.fajr.datetime.unwrap());
println!("sunrise: {}", prayers.sunrise.datetime.unwrap());
println!("dhuhr: {}", prayers.dhuhr.datetime.unwrap());
println!("asr: {}", prayers.asr.datetime.unwrap());
println!("maghrib: {}", prayers.maghrib.datetime.unwrap());
println!("isha: {}", prayers.isha.datetime.unwrap());

配置

您可以根据以下方式配置您的祷告时间计算器

参数 描述
method 用于填充已知穆斯林组织使用的配置的方法
fajr_angle 用于计算法吉尔的太阳角度
isha_angle 用于计算伊沙的太阳角度
isha_interval 在穆尔吉布之后的时间(如果设置,伊沙的时间将是穆尔吉布加上 isha_interval
madhab 用于计算阿斯尔时间
twilight 用于计算伊沙时间
high_latitude_rule 用于设置法吉尔的最低时间和伊沙的最高时间
method_adjustments 时间调整方法
adjustments 每个祷告时间的自定义祷告时间调整(分钟)。默认情况下,所有值都是 0

方法

提供了一些权威机构计算祷告时间的预设配置。

描述
MuslimWorldLeague 穆斯林世界联盟。法吉尔角度:18,伊沙角度:17
Egyptian 埃及土地测量总署。法吉尔角度:19.5,伊沙角度:17.5
Karachi 伊斯兰科学大学,卡拉奇。法吉尔角度:18,伊沙角度:18
UmmAlQura 麦加乌姆·阿尔·库里亚大学。法吉尔角度:18.5,伊沙间隔:90。《注意》:在斋月期间,您应添加一个 +30 分钟 的自定义调整以调整伊沙时间。
Dubai 阿联酋使用的方法。黎明角:18.2,宵礼角:18.2。
卡塔尔 卡塔尔使用的乌姆·阿尔-库里修改版本。黎明角:18,宵礼间隔:90。
科威特 科威特国家使用的方法。黎明角:18,宵礼角:17.5
望月委员会 望月委员会。黎明角:18,宵礼角:18。同时使用季节调整值。
新加坡 新加坡使用的方法。黎明角:20,宵礼角:18。
北美 称为ISNA方法。黎明角:15,宵礼角:15
其他 黎明角:0,宵礼角:0。这是手动初始化 Parameters 结构体的默认值。

教法学派

此设置仅用于计算晡时祈祷时间

描述
沙菲教法学派 将导致晡时时间较早(默认)
哈纳菲教法学派 将导致晡时时间较晚

晨昏线 🔜

用于计算宵礼祈祷时间

描述
红色 较早的晡时时间(默认)
白色 较晚的晡时时间

高纬度规则

调整黎明/宵礼祈祷时间的规则,当我们的祈祷时间无效时,将回退到此方法 🔜

描述
午夜时分 黎明永远不会早于午夜,宵礼永远不会晚于午夜
夜第七分之一 黎明永远不会早于夜的最后七分之一开始,宵礼永远不会晚于夜的第一七分之一结束
晨昏角 类似于夜第七分之一,但使用夜的时间分数是黎明角/60和宵礼角/60(默认)

不确定使用哪种策略?使用 recommended 方法

const high_latitude_resolution = HighLatitudeRule::recommended(coordinates);

极圈分辨率 🔜

用于解决极圈内无法定义的祈祷时间,太阳不落不升。

描述
最近地点 找到可以计算日出和日落祈祷时间的最接近的位置
最近一天 找到可以计算日出和日落祈祷时间的最接近的日期(向前或向后)
未解决 (默认)使所有祈祷都未定义
UmmAlQura 根据乌姆·阿尔-库里位置计算祈祷时间

开发

  1. 克隆存储库
  2. 设置 pre-commit
pipenv install
pipenv run pre-commit install
  1. 将您的更改合并到一个新分支中
  2. 为您的更改添加单元测试
  3. 运行单元测试: cargo test

依赖项

~5MB
~89K SLoC