Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
438f1700c7
|
|||
|
126cf68cab
|
|||
|
4302981518
|
|||
| 94aeb84da5 | |||
| 1952df0c30 | |||
| b0920d327c | |||
| 616cd54222 |
@@ -0,0 +1 @@
|
||||
.idea
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 数据源本地存储已忽略文件
|
||||
/../../../../../../:\gocode\src\b612.me\astro\.idea/dataSources/
|
||||
/dataSources.local.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
Generated
-9
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/astro.iml" filepath="$PROJECT_DIR$/.idea/astro.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
+1
-1
@@ -26,7 +26,7 @@ func show() {
|
||||
fmt.Println("当前太阳星座:", WhichCst(ra, dec, jde))
|
||||
fmt.Println("当前黄赤交角:", EclipticObliquity(jde-8.0/24.0, true))
|
||||
fmt.Println("当前日出:", JDE2Date(GetSunRiseTime(jde, 115, 32, 8, 1, 10)))
|
||||
fmt.Println("当前日落:", JDE2Date(GetSunDownTime(jde, 115, 32, 8, 1, 10)))
|
||||
fmt.Println("当前日落:", JDE2Date(GetSunSetTime(jde, 115, 32, 8, 1, 10)))
|
||||
fmt.Println("当前晨影 -6:", JDE2Date(GetAsaTime(jde, 115, 32, 8, -6)))
|
||||
fmt.Println("当前晨影 -12:", JDE2Date(GetAsaTime(jde, 115, 32, 8, -12)))
|
||||
fmt.Println("当前昏影 -6:", JDE2Date(GetBanTime(jde, 115, 32, 8, -6)))
|
||||
|
||||
+10
-6
@@ -197,10 +197,14 @@ func JDE2Date(JD float64) time.Time {
|
||||
Days = math.Floor(Days)
|
||||
tz, _ := time.LoadLocation("Local")
|
||||
dates := time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, tz)
|
||||
dates = time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000))
|
||||
return dates
|
||||
return time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000))
|
||||
}
|
||||
|
||||
// JDE2DateByZone JDE(儒略日)转日期
|
||||
// JD: 儒略日
|
||||
// tz: 目标时区
|
||||
// byZone: (true: 传入的儒略日视为目标时区当地时间的儒略日,false: 传入的儒略日视为UTC时间的儒略日)
|
||||
// 回参:转换后的日期,时区始终为目标时区
|
||||
func JDE2DateByZone(JD float64, tz *time.Location, byZone bool) time.Time {
|
||||
JD = JD + 0.5
|
||||
Z := float64(int(JD))
|
||||
@@ -231,12 +235,12 @@ func JDE2DateByZone(JD float64, tz *time.Location, byZone bool) time.Time {
|
||||
}
|
||||
tms := (Days - math.Floor(Days)) * 24 * 3600
|
||||
Days = math.Floor(Days)
|
||||
var transTz = tz
|
||||
if !byZone {
|
||||
dates := time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, time.UTC)
|
||||
return time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000)).In(tz)
|
||||
transTz = time.UTC
|
||||
}
|
||||
dates := time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, tz)
|
||||
return time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000))
|
||||
return time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, transTz).
|
||||
Add(time.Duration(int64(1000000000 * tms))).In(tz)
|
||||
}
|
||||
|
||||
func GetLunar(year, month, day int, tz float64) (lmonth, lday int, leap bool, result string) {
|
||||
|
||||
@@ -5,8 +5,12 @@ import (
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGenerateMagic(t *testing.T) {
|
||||
generateMagicNumber()
|
||||
}
|
||||
func generateMagicNumber() {
|
||||
//0月份 00000 日期 0000闰月 0000000000000 农历信息
|
||||
var tz = 8.0000 / 24.000
|
||||
@@ -14,6 +18,7 @@ func generateMagicNumber() {
|
||||
spYear := make(map[int][]int)
|
||||
var upper []uint16
|
||||
var lower []uint16
|
||||
var full []uint32
|
||||
//var info uint32 = 0
|
||||
for year := 1899; year <= 2401; year++ {
|
||||
fmt.Println(year)
|
||||
@@ -89,13 +94,16 @@ func generateMagicNumber() {
|
||||
}
|
||||
for year := 1900; year <= 2400; year++ {
|
||||
fmt.Println(year)
|
||||
up, low := magicNumberSpilt(magicNumber(yearMap[year], spYear[year]))
|
||||
magic := magicNumber(yearMap[year], spYear[year])
|
||||
up, low := magicNumberSpilt(magic)
|
||||
upper = append(upper, up)
|
||||
lower = append(lower, uint16(low))
|
||||
full = append(full, uint32(magic))
|
||||
}
|
||||
res := make(map[string]interface{})
|
||||
res["up"] = upper
|
||||
res["low"] = lower
|
||||
res["full"] = full
|
||||
d, _ := json.Marshal(res)
|
||||
os.WriteFile("test.json", d, 0644)
|
||||
}
|
||||
|
||||
+1
-1
@@ -551,7 +551,7 @@ func GetSunRiseTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
||||
}
|
||||
return JD1 - ntz/24 + TZ/24
|
||||
}
|
||||
func GetSunDownTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
||||
func GetSunSetTime(JD, Lon, Lat, TZ, ZS, HEI float64) float64 {
|
||||
var An float64
|
||||
JD = math.Floor(JD) + 1.5
|
||||
ntz := math.Round(Lon / 15)
|
||||
|
||||
+9
-5
@@ -4,13 +4,14 @@ import (
|
||||
"b612.me/astro/tools"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Test_Jq(t *testing.T) {
|
||||
data := GetJieqiLoops(2019, 24)
|
||||
for i := 1; i < 25; i++ {
|
||||
for i := 1; i < len(data); i++ {
|
||||
fmt.Println(JDE2Date(data[i]))
|
||||
}
|
||||
//fmt.Println(JDE2Date(GetWHTime(2019, 10)))
|
||||
@@ -144,7 +145,7 @@ func Test_SunRiseRound(t *testing.T) {
|
||||
func Test_SunDown(t *testing.T) {
|
||||
jde := GetNowJDE()
|
||||
for i := 10.0; i < 90.0; i += 0.3 {
|
||||
fmt.Println(i, GetSunDownTime(jde, 115, float64(i), 8, 0, 0))
|
||||
fmt.Println(i, GetSunSetTime(jde, 115, float64(i), 8, 0, 0))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,17 +163,20 @@ func TestJQDate(t *testing.T) {
|
||||
return math.Floor(d) + 0.5
|
||||
}
|
||||
c := 0
|
||||
var info string
|
||||
for year := 1900; year <= 2600; year++ {
|
||||
for pos := 0; pos < 360; pos += 15 {
|
||||
n := newGetJQTime(year, pos)
|
||||
o := GetJQTime(year, pos)
|
||||
n := newGetJQTime(year, pos) + 8.0/24.000000
|
||||
o := GetJQTime(year, pos) + 8.0/24.0000000
|
||||
if trimDay(n) != trimDay(o) {
|
||||
c++
|
||||
fmt.Printf("\"%d%03d\":%.0f,", year, pos, trimDay(o)-trimDay(n))
|
||||
fmt.Printf("\"%d%03d\"=>%v %v\n", year, pos, JDE2Date(trimDay(o)), JDE2Date(trimDay(n)))
|
||||
info += fmt.Sprintf("\"%d%03d\"=>%.0f,", year, pos, trimDay(o)-trimDay(n))
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(c)
|
||||
os.WriteFile("test.txt", []byte(info), 0644)
|
||||
}
|
||||
|
||||
func newGetJQTime(Year, Angle int) float64 { //节气时间
|
||||
|
||||
+1
-1
@@ -143,7 +143,7 @@ recalc:
|
||||
magic := int32(upper[idx])<<8 + int32(lower[idx])
|
||||
springMonth := (magic&0x800000)>>23 + 1
|
||||
springDay := (magic & 0x7FFFFF) >> 18
|
||||
if springMonth == int32(month) && springDay == int32(day) {
|
||||
if !useGoto && springMonth == int32(month) && springDay == int32(day) {
|
||||
return 1, 1, false, "正月初一"
|
||||
}
|
||||
if !useGoto && (springMonth > int32(month) || (springMonth == int32(month) && springDay > int32(day))) {
|
||||
|
||||
@@ -18,6 +18,7 @@ type lunarSolar struct {
|
||||
|
||||
func Test_ChineseCalendar(t *testing.T) {
|
||||
var testData = []lunarSolar{
|
||||
{Lyear: 1995, Lmonth: 12, Lday: 12, Leap: false, Year: 1996, Month: 1, Day: 31},
|
||||
{Lyear: 2034, Lmonth: 1, Lday: 1, Leap: false, Year: 2034, Month: 2, Day: 19},
|
||||
{Lyear: 2033, Lmonth: 12, Lday: 30, Leap: false, Year: 2034, Month: 2, Day: 18},
|
||||
{Lyear: 2033, Lmonth: 11, Lday: 27, Leap: true, Year: 2034, Month: 1, Day: 17},
|
||||
@@ -37,6 +38,7 @@ func Test_ChineseCalendar(t *testing.T) {
|
||||
{Lyear: 2021, Lmonth: 12, Lday: 29, Leap: false, Year: 2022, Month: 1, Day: 31},
|
||||
}
|
||||
for _, v := range testData {
|
||||
{
|
||||
var lyear int = v.Year
|
||||
lmonth, lday, leap, desp := SolarToLunar(time.Date(v.Year, time.Month(v.Month), v.Day, 0, 0, 0, 0, time.Local))
|
||||
if lmonth > v.Month {
|
||||
@@ -52,4 +54,21 @@ func Test_ChineseCalendar(t *testing.T) {
|
||||
t.Fatal(v, date)
|
||||
}
|
||||
}
|
||||
{
|
||||
var lyear int = v.Year
|
||||
lmonth, lday, leap, desp := RapidSolarToLunar(time.Date(v.Year, time.Month(v.Month), v.Day, 0, 0, 0, 0, time.Local))
|
||||
if lmonth > v.Month {
|
||||
lyear--
|
||||
}
|
||||
fmt.Println(lyear, desp, v.Year, v.Month, v.Day)
|
||||
if lyear != v.Lyear || lmonth != v.Lmonth || lday != v.Lday || leap != v.Leap {
|
||||
t.Fatal(v, lyear, lmonth, lday, leap, desp)
|
||||
}
|
||||
|
||||
date := RapidLunarToSolar(v.Lyear, v.Lmonth, v.Lday, v.Leap)
|
||||
if date.Year() != v.Year || int(date.Month()) != v.Month || date.Day() != v.Day {
|
||||
t.Fatal(v, date)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_JUPITER_NEVER_RISE = errors.New("ERROR:极夜,木星今日永远在地平线下!")
|
||||
ERR_JUPITER_NEVER_DOWN = errors.New("ERROR:极昼,木星今日永远在地平线上!")
|
||||
ERR_JUPITER_NEVER_SET = errors.New("ERROR:极昼,木星今日永远在地平线上!")
|
||||
// ERR_JUPITER_NEVER_DOWN deprecated: -- use ERR_JUPITER_NEVER_SET instead
|
||||
ERR_JUPITER_NEVER_DOWN = ERR_JUPITER_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_JUPITER_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_JUPITER_NEVER_DOWN
|
||||
err = ERR_JUPITER_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_JUPITER_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_JUPITER_NEVER_DOWN
|
||||
err = ERR_JUPITER_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_MARS_NEVER_RISE = errors.New("ERROR:极夜,火星今日永远在地平线下!")
|
||||
ERR_MARS_NEVER_DOWN = errors.New("ERROR:极昼,火星今日永远在地平线上!")
|
||||
ERR_MARS_NEVER_SET = errors.New("ERROR:极昼,火星今日永远在地平线上!")
|
||||
// ERR_MARS_NEVER_DOWN deprecated: -- use ERR_MARS_NEVER_SET instead
|
||||
ERR_MARS_NEVER_DOWN = ERR_MARS_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_MARS_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_MARS_NEVER_DOWN
|
||||
err = ERR_MARS_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_MARS_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_MARS_NEVER_DOWN
|
||||
err = ERR_MARS_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_MERCURY_NEVER_RISE = errors.New("ERROR:极夜,水星今日永远在地平线下!")
|
||||
ERR_MERCURY_NEVER_DOWN = errors.New("ERROR:极昼,水星今日永远在地平线上!")
|
||||
ERR_MERCURY_NEVER_SET = errors.New("ERROR:极昼,水星今日永远在地平线上!")
|
||||
// ERR_MERCURY_NEVER_DOWN deprecated: -- use ERR_MERCURY_NEVER_SET instead
|
||||
ERR_MERCURY_NEVER_DOWN = ERR_MERCURY_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_MERCURY_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_MERCURY_NEVER_DOWN
|
||||
err = ERR_MERCURY_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_MERCURY_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_MERCURY_NEVER_DOWN
|
||||
err = ERR_MERCURY_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+16
-4
@@ -7,8 +7,20 @@ import (
|
||||
)
|
||||
|
||||
func TestMercury(t *testing.T) {
|
||||
date := time.Now().Add(time.Hour * -24)
|
||||
fmt.Println(CulminationTime(date, 115))
|
||||
fmt.Println(RiseTime(date, 115, 23, 0, false))
|
||||
fmt.Println(DownTime(date, 115, 23, 0, false))
|
||||
tz := time.FixedZone("CST", 8*3600)
|
||||
date := time.Date(2022, 01, 20, 00, 00, 00, 00, tz)
|
||||
if NextConjunction(date).Unix() != 1642933683 {
|
||||
t.Fatal(NextConjunction(date).Unix())
|
||||
}
|
||||
if CulminationTime(date, 115).Unix() != 1642654651 {
|
||||
t.Fatal(CulminationTime(date, 115).Unix())
|
||||
}
|
||||
date, err := (RiseTime(date, 115, 40, 0, false))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if date.Unix() != 1642636481 {
|
||||
t.Fatal(date.Unix())
|
||||
}
|
||||
fmt.Println(SetTime(date, 115, 40, 0, false))
|
||||
}
|
||||
|
||||
+21
-5
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_MOON_NEVER_RISE = errors.New("ERROR:极夜,月亮在今日永远在地平线下!")
|
||||
ERR_MOON_NEVER_DOWN = errors.New("ERROR:极昼,月亮在今日永远在地平线上!")
|
||||
ERR_MOON_NEVER_SET = errors.New("ERROR:极昼,月亮在今日永远在地平线上!")
|
||||
// ERR_MOON_NEVER_DOWN deprecated: -- use ERR_MOON_NEVER_SET instead
|
||||
ERR_MOON_NEVER_DOWN = ERR_MOON_NEVER_SET
|
||||
ERR_NOT_TODAY = errors.New("ERROR:月亮已在(昨日/明日)(升起/降下)")
|
||||
)
|
||||
|
||||
@@ -164,19 +166,30 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_MOON_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_MOON_NEVER_DOWN
|
||||
err = ERR_MOON_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// DownTime 月亮降下时间
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 月亮降下时间
|
||||
//
|
||||
// date, 世界时(忽略此处时区)
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
if date.Hour() > 12 {
|
||||
date = date.Add(time.Hour * -12)
|
||||
@@ -196,7 +209,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_MOON_NEVER_RISE
|
||||
}
|
||||
if downJde == -1 {
|
||||
err = ERR_MOON_NEVER_DOWN
|
||||
err = ERR_MOON_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(downJde, date.Location(), true), err
|
||||
}
|
||||
@@ -209,11 +222,14 @@ func Phase(date time.Time) float64 {
|
||||
}
|
||||
|
||||
// ShuoYue 朔月
|
||||
// 返回Date对应UTC世界时的月相大小
|
||||
func ShuoYue(year float64) time.Time {
|
||||
jde := basic.TD2UT(basic.CalcMoonSH(year, 0), false)
|
||||
return basic.JDE2DateByZone(jde, time.UTC, false)
|
||||
}
|
||||
|
||||
// NextShuoYue 下次朔月时间
|
||||
// 返回date之后的下一个朔月时间(UTC时间)
|
||||
func NextShuoYue(date time.Time) time.Time {
|
||||
return nextMoonPhase(date, 0)
|
||||
}
|
||||
|
||||
+12
-19
@@ -13,38 +13,38 @@ func Test_MoonPhaseDate(t *testing.T) {
|
||||
//指定日期后的下一个朔月
|
||||
moonPhase01 := NextShuoYue(date)
|
||||
fmt.Println("下一朔月", moonPhase01)
|
||||
if moonPhase01.Unix() != 1643694349 {
|
||||
t.Fatal(moonPhase01)
|
||||
if moonPhase01.Unix() != 1643694356 {
|
||||
t.Fatal(moonPhase01.Unix())
|
||||
}
|
||||
//指定日期后的上一个朔月
|
||||
moonPhase01 = LastShuoYue(date)
|
||||
fmt.Println("上一朔月", moonPhase01)
|
||||
if moonPhase01.Unix() != 1641148399 {
|
||||
t.Fatal(moonPhase01)
|
||||
if moonPhase01.Unix() != 1641148406 {
|
||||
t.Fatal(moonPhase01.Unix())
|
||||
}
|
||||
//离指定日期最近的朔月
|
||||
moonPhase01 = ClosestShuoYue(date)
|
||||
fmt.Println("最近朔月", moonPhase01)
|
||||
if moonPhase01.Unix() != 1643694349 {
|
||||
t.Fatal(moonPhase01)
|
||||
if moonPhase01.Unix() != 1643694356 {
|
||||
t.Fatal(moonPhase01.Unix())
|
||||
}
|
||||
//离指定日期最近的望月时间
|
||||
moonPhase01 = ClosestWangYue(date)
|
||||
fmt.Println("最近望月", moonPhase01)
|
||||
if moonPhase01.Unix() != 1642463294 {
|
||||
t.Fatal(moonPhase01)
|
||||
if moonPhase01.Unix() != 1642463301 {
|
||||
t.Fatal(moonPhase01.Unix())
|
||||
}
|
||||
//离指定日期最近的上弦月时间
|
||||
moonPhase01 = ClosestShangXianYue(date)
|
||||
fmt.Println("最近上弦月", moonPhase01)
|
||||
if moonPhase01.Unix() != 1641751864 {
|
||||
t.Fatal(moonPhase01)
|
||||
if moonPhase01.Unix() != 1641751871 {
|
||||
t.Fatal(moonPhase01.Unix())
|
||||
}
|
||||
//离指定日期最近的下弦月时间
|
||||
moonPhase01 = ClosestXiaXianYue(date)
|
||||
fmt.Println("最近下弦月", moonPhase01)
|
||||
if moonPhase01.Unix() != 1643118043 {
|
||||
t.Fatal(moonPhase01)
|
||||
if moonPhase01.Unix() != 1643118050 {
|
||||
t.Fatal(moonPhase01.Unix())
|
||||
}
|
||||
//-------------------
|
||||
for i := 0; i < 26; i++ {
|
||||
@@ -52,10 +52,3 @@ func Test_MoonPhaseDate(t *testing.T) {
|
||||
fmt.Println("上一朔月", moonPhase01)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMoon(t *testing.T) {
|
||||
now := time.Now()
|
||||
fmt.Println(RiseTime(now, 115, 40, 0, true))
|
||||
fmt.Println(CulminationTime(now, 115, 40))
|
||||
fmt.Println(DownTime(now, 115, 40, 0, true))
|
||||
}
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_NEPTUNE_NEVER_RISE = errors.New("ERROR:极夜,海王星今日永远在地平线下!")
|
||||
ERR_NEPTUNE_NEVER_DOWN = errors.New("ERROR:极昼,海王星今日永远在地平线上!")
|
||||
ERR_NEPTUNE_NEVER_SET = errors.New("ERROR:极昼,海王星今日永远在地平线上!")
|
||||
// ERR_NEPTUNE_NEVER_DOWN deprecated: -- use ERR_NEPTUNE_NEVER_SET instead
|
||||
ERR_NEPTUNE_NEVER_DOWN = ERR_NEPTUNE_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_NEPTUNE_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_NEPTUNE_NEVER_DOWN
|
||||
err = ERR_NEPTUNE_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_NEPTUNE_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_NEPTUNE_NEVER_DOWN
|
||||
err = ERR_NEPTUNE_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+16
-4
@@ -7,8 +7,20 @@ import (
|
||||
)
|
||||
|
||||
func TestNeptune(t *testing.T) {
|
||||
date := time.Now().Add(time.Hour * -24)
|
||||
fmt.Println(CulminationTime(date, 115))
|
||||
fmt.Println(RiseTime(date, 115, 23, 0, false))
|
||||
fmt.Println(DownTime(date, 115, 23, 0, false))
|
||||
tz := time.FixedZone("CST", 8*3600)
|
||||
date := time.Date(2022, 01, 20, 00, 00, 00, 00, tz)
|
||||
if NextConjunction(date).Unix() != 1647171796 {
|
||||
t.Fatal(NextConjunction(date).Unix())
|
||||
}
|
||||
if CulminationTime(date, 115).Unix() != 1642665021 {
|
||||
t.Fatal(CulminationTime(date, 115).Unix())
|
||||
}
|
||||
date, err := (RiseTime(date, 115, 40, 0, false))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if date.Unix() != 1642644398 {
|
||||
t.Fatal(date.Unix())
|
||||
}
|
||||
fmt.Println(SetTime(date, 115, 40, 0, false))
|
||||
}
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_SATURN_NEVER_RISE = errors.New("ERROR:极夜,木星今日永远在地平线下!")
|
||||
ERR_SATURN_NEVER_DOWN = errors.New("ERROR:极昼,木星今日永远在地平线上!")
|
||||
ERR_SATURN_NEVER_SET = errors.New("ERROR:极昼,木星今日永远在地平线上!")
|
||||
// ERR_SATURN_NEVER_DOWN deprecated: -- use ERR_SATURN_NEVER_SET instead
|
||||
ERR_SATURN_NEVER_DOWN = ERR_SATURN_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_SATURN_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_SATURN_NEVER_DOWN
|
||||
err = ERR_SATURN_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_SATURN_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_SATURN_NEVER_DOWN
|
||||
err = ERR_SATURN_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+19
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_STAR_NEVER_RISE = errors.New("ERROR:极夜,星星在今日永远在地平线下!")
|
||||
ERR_STAR_NEVER_DOWN = errors.New("ERROR:极昼,星星在今日永远在地平线上!")
|
||||
ERR_STAR_NEVER_SET = errors.New("ERROR:极昼,星星在今日永远在地平线上!")
|
||||
// ERR_STAR_NEVER_DOWN deprecated: -- use ERR_STAR_NEVER_SET instead
|
||||
ERR_STAR_NEVER_DOWN = ERR_STAR_NEVER_SET
|
||||
)
|
||||
|
||||
// Constellation
|
||||
@@ -52,11 +54,12 @@ func RiseTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (tim
|
||||
err = ERR_STAR_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_STAR_NEVER_DOWN
|
||||
err = ERR_STAR_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 星星降落时间
|
||||
//
|
||||
// date, 世界时(忽略此处时区)
|
||||
@@ -67,6 +70,19 @@ func RiseTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (tim
|
||||
// height,高度
|
||||
// aero,是否进行大气修正
|
||||
func DownTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, ra, dec, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 星星降落时间
|
||||
//
|
||||
// date, 世界时(忽略此处时区)
|
||||
// ra,Date瞬时赤经
|
||||
// dec,Date瞬时赤纬
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,是否进行大气修正
|
||||
func SetTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
if date.Hour() > 12 {
|
||||
date = date.Add(time.Hour * -12)
|
||||
@@ -79,7 +95,7 @@ func DownTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (tim
|
||||
err = ERR_STAR_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_STAR_NEVER_DOWN
|
||||
err = ERR_STAR_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,5 +22,5 @@ func TestStar(t *testing.T) {
|
||||
fmt.Println(tools.Format(ra/15, 1), tools.Format(dec, 0))
|
||||
fmt.Println(RiseTime(now, ra, dec, 115, 40, 0, true))
|
||||
fmt.Println(CulminationTime(now, ra, 115))
|
||||
fmt.Println(DownTime(now, ra, dec, 115, 40, 0, true))
|
||||
fmt.Println(SetTime(now, ra, dec, 115, 40, 0, true))
|
||||
}
|
||||
|
||||
+26
-15
@@ -2,7 +2,6 @@ package sun
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"b612.me/astro/basic"
|
||||
@@ -10,7 +9,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_SUN_NEVER_RISE = errors.New("ERROR:极夜,太阳在今日永远在地平线下!")
|
||||
ERR_SUN_NEVER_DOWN = errors.New("ERROR:极昼,太阳在今日永远在地平线上!")
|
||||
ERR_SUN_NEVER_SET = errors.New("ERROR:极昼,太阳在今日永远在地平线上!")
|
||||
// ERR_SUN_NEVER_DOWN deprecated: -- use ERR_SUN_NEVER_RISE instead
|
||||
ERR_SUN_NEVER_DOWN = ERR_SUN_NEVER_SET
|
||||
ERR_TWILIGHT_NOT_EXISTS = errors.New("ERROR:今日晨昏朦影不存在!")
|
||||
)
|
||||
|
||||
@@ -38,26 +39,39 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
if date.Hour() > 12 {
|
||||
date = date.Add(time.Hour * -12)
|
||||
}
|
||||
//忽略时区的字面量时间
|
||||
jde := basic.Date2JDE(date)
|
||||
_, loc := date.Zone()
|
||||
timezone := float64(loc) / 3600.0
|
||||
//risedate 时区修正后的时间,转换应当包括时区
|
||||
riseJde := basic.GetSunRiseTime(jde, lon, lat, timezone, aeroFloat, height)
|
||||
if riseJde == -2 {
|
||||
err = ERR_SUN_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_SUN_NEVER_DOWN
|
||||
err = ERR_SUN_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// SunDownTime 太阳落下时间
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 太阳落下时间
|
||||
// date,当地时区日期,务必做时区修正
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 太阳落下时间
|
||||
// date,当地时区日期,务必做时区修正
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -69,18 +83,18 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
jde := basic.Date2JDE(date)
|
||||
_, loc := date.Zone()
|
||||
timezone := float64(loc) / 3600.0
|
||||
downJde := basic.GetSunDownTime(jde, lon, lat, timezone, aeroFloat, height)
|
||||
downJde := basic.GetSunSetTime(jde, lon, lat, timezone, aeroFloat, height)
|
||||
if downJde == -2 {
|
||||
err = ERR_SUN_NEVER_RISE
|
||||
}
|
||||
if downJde == -1 {
|
||||
err = ERR_SUN_NEVER_DOWN
|
||||
err = ERR_SUN_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(downJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// MorningTwilight 晨朦影
|
||||
// date,当地时区日期
|
||||
// date,当地时区日期,返回的时间时区与此参数中的时区一致
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// angle,朦影角度:可选-6 -12 -18(民用、航海、天文)
|
||||
@@ -99,11 +113,11 @@ func MorningTwilight(date time.Time, lon, lat, angle float64) (time.Time, error)
|
||||
if calcJde == -1 {
|
||||
err = ERR_TWILIGHT_NOT_EXISTS
|
||||
}
|
||||
return basic.JDE2Date(calcJde), err
|
||||
return basic.JDE2DateByZone(calcJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// EveningTwilight 昏朦影
|
||||
// date,当地时区日期
|
||||
// date,当地时区日期,返回的时间时区与此参数中的时区一致
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// angle,朦影角度:可选-6 -12 -18(民用、航海、天文)
|
||||
@@ -123,7 +137,7 @@ func EveningTwilight(date time.Time, lon, lat, angle float64) (time.Time, error)
|
||||
if calcJde == -1 {
|
||||
err = ERR_TWILIGHT_NOT_EXISTS
|
||||
}
|
||||
return basic.JDE2Date(calcJde), err
|
||||
return basic.JDE2DateByZone(calcJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// EclipticObliquity 黄赤交角
|
||||
@@ -176,7 +190,7 @@ func TrueLo(date time.Time) float64 {
|
||||
func TrueBo(date time.Time) float64 {
|
||||
//转换为UTC时间
|
||||
jde := basic.Date2JDE(date.UTC())
|
||||
return basic.HSunTrueLo(basic.TD2UT(jde, true))
|
||||
return basic.HSunTrueBo(basic.TD2UT(jde, true))
|
||||
}
|
||||
|
||||
// ApparentLo 太阳视黄经
|
||||
@@ -256,10 +270,7 @@ func Zenith(date time.Time, lon, lat float64) float64 {
|
||||
// CulminationTime 太阳中天时间
|
||||
// 返回给定经纬度、对应date时区date时刻的太阳中天日期
|
||||
func CulminationTime(date time.Time, lon float64) time.Time {
|
||||
jde := basic.Date2JDE(date)
|
||||
if jde-math.Floor(jde) > 0.5 {
|
||||
jde++
|
||||
}
|
||||
jde := basic.Date2JDE(date.Add(time.Duration(-1*date.Hour())*time.Hour)) + 0.5
|
||||
_, loc := date.Zone()
|
||||
timezone := float64(loc) / 3600.0
|
||||
calcJde := basic.GetSunTZTime(jde, lon, timezone) - timezone/24.00
|
||||
|
||||
+24
-4
@@ -2,13 +2,33 @@ package sun
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestSun(t *testing.T) {
|
||||
now := time.Now()
|
||||
fmt.Println(RiseTime(now, 115, 40, 0, true))
|
||||
fmt.Println(CulminationTime(now, 115))
|
||||
fmt.Println(DownTime(now, 115, 40, 0, true))
|
||||
ja, err := time.LoadLocation("Asia/Tokyo")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
now, err := time.ParseInLocation("2006-01-02 15:04:05", "2020-01-01 00:00:00", ja)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
d, err := RiseTime(now, 115, 40, 0, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if d.Format("2006-01-02 15:04:05") != "2020-01-01 08:41:45" {
|
||||
t.Fatal(d.Format("2006-01-02 15:04:05"))
|
||||
}
|
||||
bo := TrueBo(now)
|
||||
if math.Abs(bo) > 2 {
|
||||
t.Fatal(bo)
|
||||
}
|
||||
fmt.Println(CulminationTime(now, 115))
|
||||
fmt.Println(SetTime(now, 115, 40, 0, true))
|
||||
fmt.Println(MorningTwilight(now, 115, 40, -6))
|
||||
fmt.Println(EveningTwilight(now, 115, 40, -6))
|
||||
}
|
||||
|
||||
+2
-4
@@ -34,10 +34,8 @@ func FloatRound(f float64, n int) float64 {
|
||||
}
|
||||
|
||||
func Limit360(x float64) float64 {
|
||||
for x > 360 {
|
||||
x -= 360
|
||||
}
|
||||
for x < 0 {
|
||||
x = math.Mod(x, 360)
|
||||
if x < 0 {
|
||||
x += 360
|
||||
}
|
||||
return x
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_URANUS_NEVER_RISE = errors.New("ERROR:极夜,天王星今日永远在地平线下!")
|
||||
ERR_URANUS_NEVER_DOWN = errors.New("ERROR:极昼,天王星今日永远在地平线上!")
|
||||
ERR_URANUS_NEVER_SET = errors.New("ERROR:极昼,天王星今日永远在地平线上!")
|
||||
// ERR_URANUS_NEVER_DOWN deprecated: -- use ERR_URANUS_NEVER_SET instead
|
||||
ERR_URANUS_NEVER_DOWN = ERR_URANUS_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_URANUS_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_URANUS_NEVER_DOWN
|
||||
err = ERR_URANUS_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_URANUS_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_URANUS_NEVER_DOWN
|
||||
err = ERR_URANUS_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+16
-3
@@ -10,7 +10,9 @@ import (
|
||||
|
||||
var (
|
||||
ERR_VENUS_NEVER_RISE = errors.New("ERROR:极夜,金星今日永远在地平线下!")
|
||||
ERR_VENUS_NEVER_DOWN = errors.New("ERROR:极昼,金星今日永远在地平线上!")
|
||||
ERR_VENUS_NEVER_SET = errors.New("ERROR:极昼,金星今日永远在地平线上!")
|
||||
// ERR_VENUS_NEVER_DOWN deprecated: -- use ERR_VENUS_NEVER_SET instead
|
||||
ERR_VENUS_NEVER_DOWN = ERR_VENUS_NEVER_SET
|
||||
)
|
||||
|
||||
// ApparentLo 视黄经
|
||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_VENUS_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_VENUS_NEVER_DOWN
|
||||
err = ERR_VENUS_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
// deprecated: -- use SetTime instead
|
||||
// DownTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
return SetTime(date, lon, lat, height, aero)
|
||||
}
|
||||
|
||||
// SetTime 落下时间
|
||||
// date,取日期,时区忽略
|
||||
// lon,经度,东正西负
|
||||
// lat,纬度,北正南负
|
||||
// height,高度
|
||||
// aero,true时进行大气修正
|
||||
func SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
||||
var err error
|
||||
var aeroFloat float64
|
||||
if aero {
|
||||
@@ -150,7 +163,7 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
||||
err = ERR_VENUS_NEVER_RISE
|
||||
}
|
||||
if riseJde == -1 {
|
||||
err = ERR_VENUS_NEVER_DOWN
|
||||
err = ERR_VENUS_NEVER_SET
|
||||
}
|
||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||
}
|
||||
|
||||
+1
-1
@@ -10,5 +10,5 @@ func TestVenus(t *testing.T) {
|
||||
date := time.Now().Add(time.Hour * -24)
|
||||
fmt.Println(CulminationTime(date, 115))
|
||||
fmt.Println(RiseTime(date, 115, 23, 0, false))
|
||||
fmt.Println(DownTime(date, 115, 23, 0, false))
|
||||
fmt.Println(SetTime(date, 115, 23, 0, false))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user