Git Product home page Git Product logo

6tail / lunar-go Goto Github PK

View Code? Open in Web Editor NEW
199.0 8.0 53.0 250 KB

日历、公历(阳历)、农历(阴历、老黄历)、道历、佛历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道黑道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.

Home Page: https://6tail.cn/calendar/api.html

License: MIT License

Go 100.00%
go calendar lunar

lunar-go's People

Contributors

6tail avatar pan269 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lunar-go's Issues

超出范围

......
// 指定阳历时间得到八字信息
solar := calendar.NewSolar(1981, 12, 10, 12, 30, 0)
lunar := solar.GetLunar()

// 值年九星
jx := lunar.GetYearNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值月九星
jx = lunar.GetMonthNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值日九星
jx = lunar.GetDayNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值时九星
jx = lunar.GetTimeNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

......

%!v(PANIC=String method: runtime error: index out of range [9] with length 9)
panic: runtime error: index out of range [9] with length 9

goroutine 1 [running]:
github.com/6tail/lunar-go/calendar.(*NineStar).GetNumber(0xc0000a4cc8, 0x70, 0x4e)
NineStar.go:63 +0xfa
github.com/6tail/lunar-go/calendar.(*NineStar).ToFullString(0xc0000a4cc8, 0xc000010018, 0xc00029ff08)
NineStar.go:133 +0x2f
main.main()
main.go:25 +0x213
exit status 2


运行下面就能解决:
// 指定阳历时间得到八字信息
solar := calendar.NewSolar(1981, 12, 10, 12, 30, 0)
lunar := solar.GetLunar()

   ......
   **// 日忌
 for i := lunar.GetDayJi().Front(); i != nil; i = i.Next() {
 	fmt.Print(i.Value.(string))
 	fmt.Print(" ")
 }
fmt.Println()**
   ......

// 值年九星
jx := lunar.GetYearNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值月九星
jx = lunar.GetMonthNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值日九星
jx = lunar.GetDayNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值时九星
jx = lunar.GetTimeNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

部分大月份计算错误

......
solar = calendar.NewSolar(2012, 12, 18, 12, 0, 0)
//solar = calendar.NewSolar(2018, 12, 11, 12, 30, 0)
lunar = solar.GetLunar()

// 女运
yun := baZi.GetYun(1)
......

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x10bf30a]
goroutine 1 [running]:
github.com/6tail/lunar-go/calendar.(*JieQi).GetSolar(...)
JieQi.go:55
github.com/6tail/lunar-go/calendar.(*Yun).computeStart(0xc000162090)
Yun.go:45 +0xea
github.com/6tail/lunar-go/calendar.NewYun(0xc00000e038, 0x1, 0xc000143c38)
Yun.go:30 +0x7d
github.com/6tail/lunar-go/calendar.(*EightChar).GetYun(...)
EightChar.go:296
exit status 2

节气的时间不正确!

寿星天文历 时间 和 代码计算的时间不一样
image
代码计算出来是这个 有误差!
image

package main

import (
	"fmt"
	"github.com/6tail/lunar-go/calendar"
	"time"
)

func main() {
	d := calendar.NewLunarFromDate(time.Date(2020, 11, 22, 0, 0, 0, 0, time.Local))
	fmt.Println(d)
	table := d.GetJieQiTable()
	fmt.Println(table["小雪"].ToYmdHms())
}

身宫计算问题

func (eightChar *EightChar) GetShenGong() string {
	monthZhiIndex := 0
	timeZhiIndex := 0
	size := len(MONTH_ZHI)
	for i := 0; i < size; i++ {
		zhi := MONTH_ZHI[i]
		if strings.Compare(eightChar.GetMonthZhi(), zhi) == 0 {
			monthZhiIndex = i
		}
		if strings.Compare(eightChar.GetTimeZhi(), zhi) == 0 {
			timeZhiIndex = i
		}
	}
	zhiIndex := 2 + monthZhiIndex + timeZhiIndex
	if zhiIndex > 12 {
		zhiIndex -= 12
	}
	jiaZiIndex := LunarUtil.GetJiaZiIndex(eightChar.lunar.GetMonthInGanZhiExact()) - (monthZhiIndex - zhiIndex)
	if jiaZiIndex >= 60 {
		jiaZiIndex -= 60
	}
	if jiaZiIndex < 0 {
		jiaZiIndex += 60
	}
	return LunarUtil.JIA_ZI[jiaZiIndex]
}

其中zhiIndex 可能在减去12后还是会大于12的情况比如 1990-01-27 ,会导致身宫计算错误
正确的是 丙寅 目前计算出来的是 戊寅

[BUG] calendar.NewLunarYear 并发写LEAP以及CACHE

fatal error: concurrent map writes

goroutine 83169046 [running]:
runtime.throw(0x23499751, 0x15)
/usr/local/go/src/runtime/panic.go:1117 +0x72 fp=0xc049027458 sp=0xc049027428 pc=0x9b894b2
runtime.mapassign_fast64(0x21ae1ac0, 0xc00eab86c0, 0x7f2, 0x337c7f00)
/usr/local/go/src/runtime/map_fast64.go:101 +0x33e fp=0xc049027498 sp=0xc049027458 pc=0x9b63bde
github.com/6tail/lunar-go/calendar.NewLunarYear(0x7f2, 0xeeff37e80)
/opt/compile_path/pkg/mod/github.com/6tail/[email protected]/calendar/LunarYear.go:58 +0x27e fp=0xc0490274f0 sp=0xc049027498 pc=0x20a5417e
github.com/6tail/lunar-go/calendar.NewLunarFromDate(0x0, 0xeeff37e80, 0x33765e40, 0x0)
/opt/compile_path/pkg/mod/github.com/6tail/[email protected]/calendar/Lunar.go:93 +0xa5 fp=0xc0490275a0 sp=0xc0490274f0 pc=0x20a3e225
github.com/6tail/lunar-go/calendar.(*Solar).GetLunar(...)
/opt/compile_path/pkg/mod/github.com/6tail/[email protected]/calendar/Solar.go:355

image

[BUG] 今天(2021年12月18日)是星期四

代码:

lunar := calendar.NewLunarFromYmd(2021, 12, 18)
t.Logf("星期:%v", lunar.GetSolar().GetWeek())
t.Logf("今天星期%v", lunar.GetSolar().GetWeekInChinese())

输出结果:

all_test.go:48: 星期:4
all_test.go:49: 今天星期四

每日宜忌没有输出

看你的文档中老黄历的例子里有输出。而在调用程序的时候,没有输出。

[BUG] HolidayUtil获取2022春节假期错误

h := HolidayUtil.GetHolidays("2022-01")
	for i := h.Front(); i != nil; i = i.Next() {
		value := i.Value.(*calendar.Holiday)
		fmt.Println(value.GetDay(), value.GetName())
	}
output:
  2022-01-01 元旦节
  2022-01-02 元旦节
  2022-01-03 元旦节
  2022-01-29 春节
  2022-01-30 春节
  2022-01-31 春节

实际上 2022-01-29 2022-01-30 并不是春节假期

输入异常的日期,输出结果处理的不是很好

代码片段
func main() {
t := time.Date(2021, 2, 29, 0, 0, 0, 0, time.Local)
fmt.Println(t)
solar := calendar.NewSolar(2021, 2, 29, 0, 0, 0)
fmt.Println(solar.ToFullString())
fmt.Println(solar.GetLunar().ToFullString())
return
}

输出:
2021-03-01 00:00:00 +0800 CST
2021-02-29 00:00:00 星期一 双鱼座
二〇二一年正月十八 辛丑(牛)年 庚寅(虎)月 戊申(猴)日 子(鼠)时 纳音[壁上土 松柏木 大驿土 桑柘木] 星期一 西方白虎 星宿毕月乌 彭祖百忌[戊不受田田主不祥 申不安床鬼祟入房] 喜神方位 阳贵神方位 阴贵神方位 福神方位 财神方位 冲[(壬寅)虎] 煞[南]

如2021, 2, 29,实际上没有这个时间,golang 的标准库会处理成3月1号,本库依然输出2021-02-29日,请问作者这里是怎么考量的?

演示文档类型错误

d := calendar.NewTaoFromLunar(calendar.NewLunarFromYmd(2021, 10, 14))
l := d.GetFestivals()
for i := l.Front(); i != nil; i = i.Next() {
  fmt.Println(i.Value.(string))
}

这里的i.Valuecalendar.TaoFestival 类型

calendar.ListSolarFromBaZi 八字反推阳历 部分八字无法反推

比如测试用例中的 "丙辰", "丁酉", "丙子", "甲午"

--- FAIL: TestEightChar12 (0.04s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x52a5eb]

goroutine 13 [running]:
testing.tRunner.func1.2({0x55dbe0, 0x6c3c90})
        /usr/local/go/src/testing/testing.go:1545 +0x238
testing.tRunner.func1()
        /usr/local/go/src/testing/testing.go:1548 +0x397
panic({0x55dbe0?, 0x6c3c90?})
        /usr/local/go/src/runtime/panic.go:914 +0x21f
github.com/6tail/lunar-go/test.TestEightChar12(0xc00020f1e0)
        /root/go/pkg/mod/github.com/6tail/[email protected]/test/EightChar_test.go:147 +0xcb
testing.tRunner(0xc00020f1e0, 0x59de20)
        /usr/local/go/src/testing/testing.go:1595 +0xff
created by testing.(*T).Run in goroutine 1
        /usr/local/go/src/testing/testing.go:1648 +0x3ad
exit status 2
FAIL    github.com/6tail/lunar-go/test  0.046s

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.