【问题标题】:Hijiri date to Gregorian date in golang回历日期到golang中的公历日期
【发布时间】:2017-11-29 12:34:48
【问题描述】:

我正在尝试根据 Umm AlQura 日历将回历日期转换为公历日期。我在互联网上找不到很多东西(可能归因于我的懒惰态度)。我尝试将回历日期转换为儒略数字,然后从儒略数字转换为公历日期。

但是,我只能将回历日期转换为朱利安数。我不知道如何从儒略数转换为公历。

或者也许我采取了错误的方法。任何人都可以帮助根据 Umm AlQura 日历将回历日期转换为 golang 中的公历日期吗?

这是我迄今为止所做的:

func getJulianNumber(y, m, d int) float64 {
    if m == 1 || m == 2 {
        y -= 1
        m += 12
    }
    a := y / 100
    b := a / 4
    c := 2 - a + b
    e := int(365.25 * (float64(y) + 4716))
    f := int(30.6001 * (float64(m) + 1))
    return float64(float64(c) + float64(d) + float64(e) + float64(f) - 1524.5)
}

func julianToH(jd float64) {
    q := jd + 0.5
    z := int(q)
    w := int((float64(z) - 1867216.25) / 36524.25)
    x := w / 4
    a := int(float64(z) + 1 + float64(w) - float64(x))
    b := a + 1524
    c := int((float64(b) - 122.1) / 365.25)
    d := int(365.25 * float64(c))
    e := int((float64(b) - float64(d)) / 30.6001)
    f := int(30.6001 * float64(e))

    day := int(float64(b) - float64(d) - float64(f) + (q - float64(z)))
    var month, year int
    e1 := e - 1
    if e1 <= 12 {
        month = e1
    } else {
        month = e - 3
    }
    if month == 1 || month == 2 {
        year = int(c - 4715)
    } else {
        year = int(c - 4716)
    }
    fmt.Println(day, month, year)
}

非常感谢!

【问题讨论】:

  • 请分享您尝试运行的代码。
  • 请检查编辑后的答案!

标签: go gregorian-calendar hijri


【解决方案1】:

Go 有日期格式的转换器,而不是日期类型。我认为你必须实现一个go包,你可以在这里找到JS的代码https://github.com/arabiaweather/hijri-date/blob/master/hijri-date.js

【讨论】:

  • 正是我所做的!虽然使用xsoh.ws/hijritools 来获得灵感。检查我的答案!
【解决方案2】:

我创建了一个小型帮助库hijri 来解决我的问题。感谢大家的帮助!

【讨论】:

    【解决方案3】:

    如果您指的是 Hijri Shamsi(阳历),您可以使用 persical。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多