回历日期到 golang 中的公历日期

Hijiri date to Gregorian date in golang

我正在尝试根据 Umm AlQura 日历将回历日期转换为公历日期。我在 Internet 上找不到太多(可能是我懒惰的态度)。我尝试将 Hijri 日期转换为 Julian 数字,然后从 Julian 数字转换为 Gregorian 日期。

但是,我只能将回历日期转换为儒略数字。我不知道如何将 Julian 数字转换为 Gregorian 数字。

也许我采取了错误的方法。任何人都可以帮助根据 Umm AlQura 日历将 Hijri 日期转换为 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 有日期格式的转换器,没有日期类型。我认为你必须实现一个 go 包,你可以在这里找到 JS 的代码 https://github.com/arabiaweather/hijri-date/blob/master/hijri-date.js

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

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