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("当前太阳星座:", WhichCst(ra, dec, jde))
|
||||||
fmt.Println("当前黄赤交角:", EclipticObliquity(jde-8.0/24.0, true))
|
fmt.Println("当前黄赤交角:", EclipticObliquity(jde-8.0/24.0, true))
|
||||||
fmt.Println("当前日出:", JDE2Date(GetSunRiseTime(jde, 115, 32, 8, 1, 10)))
|
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("当前晨影 -6:", JDE2Date(GetAsaTime(jde, 115, 32, 8, -6)))
|
||||||
fmt.Println("当前晨影 -12:", JDE2Date(GetAsaTime(jde, 115, 32, 8, -12)))
|
fmt.Println("当前晨影 -12:", JDE2Date(GetAsaTime(jde, 115, 32, 8, -12)))
|
||||||
fmt.Println("当前昏影 -6:", JDE2Date(GetBanTime(jde, 115, 32, 8, -6)))
|
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)
|
Days = math.Floor(Days)
|
||||||
tz, _ := time.LoadLocation("Local")
|
tz, _ := time.LoadLocation("Local")
|
||||||
dates := time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, tz)
|
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 time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000))
|
||||||
return dates
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JDE2DateByZone JDE(儒略日)转日期
|
||||||
|
// JD: 儒略日
|
||||||
|
// tz: 目标时区
|
||||||
|
// byZone: (true: 传入的儒略日视为目标时区当地时间的儒略日,false: 传入的儒略日视为UTC时间的儒略日)
|
||||||
|
// 回参:转换后的日期,时区始终为目标时区
|
||||||
func JDE2DateByZone(JD float64, tz *time.Location, byZone bool) time.Time {
|
func JDE2DateByZone(JD float64, tz *time.Location, byZone bool) time.Time {
|
||||||
JD = JD + 0.5
|
JD = JD + 0.5
|
||||||
Z := float64(int(JD))
|
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
|
tms := (Days - math.Floor(Days)) * 24 * 3600
|
||||||
Days = math.Floor(Days)
|
Days = math.Floor(Days)
|
||||||
|
var transTz = tz
|
||||||
if !byZone {
|
if !byZone {
|
||||||
dates := time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, time.UTC)
|
transTz = time.UTC
|
||||||
return time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000)).In(tz)
|
|
||||||
}
|
}
|
||||||
dates := time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, tz)
|
return time.Date(int(Years), time.Month(int(Months)), int(Days), 0, 0, 0, 0, transTz).
|
||||||
return time.Unix(dates.Unix()+int64(tms), int64((tms-math.Floor(tms))*1000000000))
|
Add(time.Duration(int64(1000000000 * tms))).In(tz)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLunar(year, month, day int, tz float64) (lmonth, lday int, leap bool, result string) {
|
func GetLunar(year, month, day int, tz float64) (lmonth, lday int, leap bool, result string) {
|
||||||
|
|||||||
@@ -5,8 +5,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestGenerateMagic(t *testing.T) {
|
||||||
|
generateMagicNumber()
|
||||||
|
}
|
||||||
func generateMagicNumber() {
|
func generateMagicNumber() {
|
||||||
//0月份 00000 日期 0000闰月 0000000000000 农历信息
|
//0月份 00000 日期 0000闰月 0000000000000 农历信息
|
||||||
var tz = 8.0000 / 24.000
|
var tz = 8.0000 / 24.000
|
||||||
@@ -14,6 +18,7 @@ func generateMagicNumber() {
|
|||||||
spYear := make(map[int][]int)
|
spYear := make(map[int][]int)
|
||||||
var upper []uint16
|
var upper []uint16
|
||||||
var lower []uint16
|
var lower []uint16
|
||||||
|
var full []uint32
|
||||||
//var info uint32 = 0
|
//var info uint32 = 0
|
||||||
for year := 1899; year <= 2401; year++ {
|
for year := 1899; year <= 2401; year++ {
|
||||||
fmt.Println(year)
|
fmt.Println(year)
|
||||||
@@ -89,13 +94,16 @@ func generateMagicNumber() {
|
|||||||
}
|
}
|
||||||
for year := 1900; year <= 2400; year++ {
|
for year := 1900; year <= 2400; year++ {
|
||||||
fmt.Println(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)
|
upper = append(upper, up)
|
||||||
lower = append(lower, uint16(low))
|
lower = append(lower, uint16(low))
|
||||||
|
full = append(full, uint32(magic))
|
||||||
}
|
}
|
||||||
res := make(map[string]interface{})
|
res := make(map[string]interface{})
|
||||||
res["up"] = upper
|
res["up"] = upper
|
||||||
res["low"] = lower
|
res["low"] = lower
|
||||||
|
res["full"] = full
|
||||||
d, _ := json.Marshal(res)
|
d, _ := json.Marshal(res)
|
||||||
os.WriteFile("test.json", d, 0644)
|
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
|
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
|
var An float64
|
||||||
JD = math.Floor(JD) + 1.5
|
JD = math.Floor(JD) + 1.5
|
||||||
ntz := math.Round(Lon / 15)
|
ntz := math.Round(Lon / 15)
|
||||||
|
|||||||
+9
-5
@@ -4,13 +4,14 @@ import (
|
|||||||
"b612.me/astro/tools"
|
"b612.me/astro/tools"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_Jq(t *testing.T) {
|
func Test_Jq(t *testing.T) {
|
||||||
data := GetJieqiLoops(2019, 24)
|
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(data[i]))
|
||||||
}
|
}
|
||||||
//fmt.Println(JDE2Date(GetWHTime(2019, 10)))
|
//fmt.Println(JDE2Date(GetWHTime(2019, 10)))
|
||||||
@@ -144,7 +145,7 @@ func Test_SunRiseRound(t *testing.T) {
|
|||||||
func Test_SunDown(t *testing.T) {
|
func Test_SunDown(t *testing.T) {
|
||||||
jde := GetNowJDE()
|
jde := GetNowJDE()
|
||||||
for i := 10.0; i < 90.0; i += 0.3 {
|
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
|
return math.Floor(d) + 0.5
|
||||||
}
|
}
|
||||||
c := 0
|
c := 0
|
||||||
|
var info string
|
||||||
for year := 1900; year <= 2600; year++ {
|
for year := 1900; year <= 2600; year++ {
|
||||||
for pos := 0; pos < 360; pos += 15 {
|
for pos := 0; pos < 360; pos += 15 {
|
||||||
n := newGetJQTime(year, pos)
|
n := newGetJQTime(year, pos) + 8.0/24.000000
|
||||||
o := GetJQTime(year, pos)
|
o := GetJQTime(year, pos) + 8.0/24.0000000
|
||||||
if trimDay(n) != trimDay(o) {
|
if trimDay(n) != trimDay(o) {
|
||||||
c++
|
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)
|
fmt.Println(c)
|
||||||
|
os.WriteFile("test.txt", []byte(info), 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGetJQTime(Year, Angle int) float64 { //节气时间
|
func newGetJQTime(Year, Angle int) float64 { //节气时间
|
||||||
|
|||||||
+1
-1
@@ -143,7 +143,7 @@ recalc:
|
|||||||
magic := int32(upper[idx])<<8 + int32(lower[idx])
|
magic := int32(upper[idx])<<8 + int32(lower[idx])
|
||||||
springMonth := (magic&0x800000)>>23 + 1
|
springMonth := (magic&0x800000)>>23 + 1
|
||||||
springDay := (magic & 0x7FFFFF) >> 18
|
springDay := (magic & 0x7FFFFF) >> 18
|
||||||
if springMonth == int32(month) && springDay == int32(day) {
|
if !useGoto && springMonth == int32(month) && springDay == int32(day) {
|
||||||
return 1, 1, false, "正月初一"
|
return 1, 1, false, "正月初一"
|
||||||
}
|
}
|
||||||
if !useGoto && (springMonth > int32(month) || (springMonth == int32(month) && springDay > int32(day))) {
|
if !useGoto && (springMonth > int32(month) || (springMonth == int32(month) && springDay > int32(day))) {
|
||||||
|
|||||||
+31
-12
@@ -18,6 +18,7 @@ type lunarSolar struct {
|
|||||||
|
|
||||||
func Test_ChineseCalendar(t *testing.T) {
|
func Test_ChineseCalendar(t *testing.T) {
|
||||||
var testData = []lunarSolar{
|
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: 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: 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},
|
{Lyear: 2033, Lmonth: 11, Lday: 27, Leap: true, Year: 2034, Month: 1, Day: 17},
|
||||||
@@ -37,19 +38,37 @@ func Test_ChineseCalendar(t *testing.T) {
|
|||||||
{Lyear: 2021, Lmonth: 12, Lday: 29, Leap: false, Year: 2022, Month: 1, Day: 31},
|
{Lyear: 2021, Lmonth: 12, Lday: 29, Leap: false, Year: 2022, Month: 1, Day: 31},
|
||||||
}
|
}
|
||||||
for _, v := range testData {
|
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))
|
var lyear int = v.Year
|
||||||
if lmonth > v.Month {
|
lmonth, lday, leap, desp := SolarToLunar(time.Date(v.Year, time.Month(v.Month), v.Day, 0, 0, 0, 0, time.Local))
|
||||||
lyear--
|
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 {
|
fmt.Println(lyear, desp, v.Year, v.Month, v.Day)
|
||||||
t.Fatal(v, lyear, lmonth, lday, leap, desp)
|
if lyear != v.Lyear || lmonth != v.Lmonth || lday != v.Lday || leap != v.Leap {
|
||||||
}
|
t.Fatal(v, lyear, lmonth, lday, leap, desp)
|
||||||
|
}
|
||||||
|
|
||||||
date := LunarToSolar(v.Lyear, v.Lmonth, v.Lday, v.Leap)
|
date := LunarToSolar(v.Lyear, v.Lmonth, v.Lday, v.Leap)
|
||||||
if date.Year() != v.Year || int(date.Month()) != v.Month || date.Day() != v.Day {
|
if date.Year() != v.Year || int(date.Month()) != v.Month || date.Day() != v.Day {
|
||||||
t.Fatal(v, date)
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_JUPITER_NEVER_RISE = errors.New("ERROR:极夜,木星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_JUPITER_NEVER_RISE
|
err = ERR_JUPITER_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_JUPITER_NEVER_DOWN
|
err = ERR_JUPITER_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_JUPITER_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_JUPITER_NEVER_DOWN
|
err = ERR_JUPITER_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -205,7 +218,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextJupiterRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextJupiterRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_MARS_NEVER_RISE = errors.New("ERROR:极夜,火星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_MARS_NEVER_RISE
|
err = ERR_MARS_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_MARS_NEVER_DOWN
|
err = ERR_MARS_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_MARS_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_MARS_NEVER_DOWN
|
err = ERR_MARS_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -205,7 +218,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextMarsRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextMarsRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_MERCURY_NEVER_RISE = errors.New("ERROR:极夜,水星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_MERCURY_NEVER_RISE
|
err = ERR_MERCURY_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_MERCURY_NEVER_DOWN
|
err = ERR_MERCURY_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_MERCURY_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_MERCURY_NEVER_DOWN
|
err = ERR_MERCURY_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -233,7 +246,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextMercuryRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextMercuryRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+16
-4
@@ -7,8 +7,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestMercury(t *testing.T) {
|
func TestMercury(t *testing.T) {
|
||||||
date := time.Now().Add(time.Hour * -24)
|
tz := time.FixedZone("CST", 8*3600)
|
||||||
fmt.Println(CulminationTime(date, 115))
|
date := time.Date(2022, 01, 20, 00, 00, 00, 00, tz)
|
||||||
fmt.Println(RiseTime(date, 115, 23, 0, false))
|
if NextConjunction(date).Unix() != 1642933683 {
|
||||||
fmt.Println(DownTime(date, 115, 23, 0, false))
|
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 (
|
var (
|
||||||
ERR_MOON_NEVER_RISE = errors.New("ERROR:极夜,月亮在今日永远在地平线下!")
|
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:月亮已在(昨日/明日)(升起/降下)")
|
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
|
err = ERR_MOON_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_MOON_NEVER_DOWN
|
err = ERR_MOON_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
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, 世界时(忽略此处时区)
|
// date, 世界时(忽略此处时区)
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
// lat,纬度,北正南负
|
// lat,纬度,北正南负
|
||||||
// height,高度
|
// height,高度
|
||||||
// aero,大气修正
|
// 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
|
var err error
|
||||||
if date.Hour() > 12 {
|
if date.Hour() > 12 {
|
||||||
date = date.Add(time.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
|
err = ERR_MOON_NEVER_RISE
|
||||||
}
|
}
|
||||||
if downJde == -1 {
|
if downJde == -1 {
|
||||||
err = ERR_MOON_NEVER_DOWN
|
err = ERR_MOON_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(downJde, date.Location(), true), err
|
return basic.JDE2DateByZone(downJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -209,11 +222,14 @@ func Phase(date time.Time) float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ShuoYue 朔月
|
// ShuoYue 朔月
|
||||||
|
// 返回Date对应UTC世界时的月相大小
|
||||||
func ShuoYue(year float64) time.Time {
|
func ShuoYue(year float64) time.Time {
|
||||||
jde := basic.TD2UT(basic.CalcMoonSH(year, 0), false)
|
jde := basic.TD2UT(basic.CalcMoonSH(year, 0), false)
|
||||||
return basic.JDE2DateByZone(jde, time.UTC, false)
|
return basic.JDE2DateByZone(jde, time.UTC, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NextShuoYue 下次朔月时间
|
||||||
|
// 返回date之后的下一个朔月时间(UTC时间)
|
||||||
func NextShuoYue(date time.Time) time.Time {
|
func NextShuoYue(date time.Time) time.Time {
|
||||||
return nextMoonPhase(date, 0)
|
return nextMoonPhase(date, 0)
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-19
@@ -13,38 +13,38 @@ func Test_MoonPhaseDate(t *testing.T) {
|
|||||||
//指定日期后的下一个朔月
|
//指定日期后的下一个朔月
|
||||||
moonPhase01 := NextShuoYue(date)
|
moonPhase01 := NextShuoYue(date)
|
||||||
fmt.Println("下一朔月", moonPhase01)
|
fmt.Println("下一朔月", moonPhase01)
|
||||||
if moonPhase01.Unix() != 1643694349 {
|
if moonPhase01.Unix() != 1643694356 {
|
||||||
t.Fatal(moonPhase01)
|
t.Fatal(moonPhase01.Unix())
|
||||||
}
|
}
|
||||||
//指定日期后的上一个朔月
|
//指定日期后的上一个朔月
|
||||||
moonPhase01 = LastShuoYue(date)
|
moonPhase01 = LastShuoYue(date)
|
||||||
fmt.Println("上一朔月", moonPhase01)
|
fmt.Println("上一朔月", moonPhase01)
|
||||||
if moonPhase01.Unix() != 1641148399 {
|
if moonPhase01.Unix() != 1641148406 {
|
||||||
t.Fatal(moonPhase01)
|
t.Fatal(moonPhase01.Unix())
|
||||||
}
|
}
|
||||||
//离指定日期最近的朔月
|
//离指定日期最近的朔月
|
||||||
moonPhase01 = ClosestShuoYue(date)
|
moonPhase01 = ClosestShuoYue(date)
|
||||||
fmt.Println("最近朔月", moonPhase01)
|
fmt.Println("最近朔月", moonPhase01)
|
||||||
if moonPhase01.Unix() != 1643694349 {
|
if moonPhase01.Unix() != 1643694356 {
|
||||||
t.Fatal(moonPhase01)
|
t.Fatal(moonPhase01.Unix())
|
||||||
}
|
}
|
||||||
//离指定日期最近的望月时间
|
//离指定日期最近的望月时间
|
||||||
moonPhase01 = ClosestWangYue(date)
|
moonPhase01 = ClosestWangYue(date)
|
||||||
fmt.Println("最近望月", moonPhase01)
|
fmt.Println("最近望月", moonPhase01)
|
||||||
if moonPhase01.Unix() != 1642463294 {
|
if moonPhase01.Unix() != 1642463301 {
|
||||||
t.Fatal(moonPhase01)
|
t.Fatal(moonPhase01.Unix())
|
||||||
}
|
}
|
||||||
//离指定日期最近的上弦月时间
|
//离指定日期最近的上弦月时间
|
||||||
moonPhase01 = ClosestShangXianYue(date)
|
moonPhase01 = ClosestShangXianYue(date)
|
||||||
fmt.Println("最近上弦月", moonPhase01)
|
fmt.Println("最近上弦月", moonPhase01)
|
||||||
if moonPhase01.Unix() != 1641751864 {
|
if moonPhase01.Unix() != 1641751871 {
|
||||||
t.Fatal(moonPhase01)
|
t.Fatal(moonPhase01.Unix())
|
||||||
}
|
}
|
||||||
//离指定日期最近的下弦月时间
|
//离指定日期最近的下弦月时间
|
||||||
moonPhase01 = ClosestXiaXianYue(date)
|
moonPhase01 = ClosestXiaXianYue(date)
|
||||||
fmt.Println("最近下弦月", moonPhase01)
|
fmt.Println("最近下弦月", moonPhase01)
|
||||||
if moonPhase01.Unix() != 1643118043 {
|
if moonPhase01.Unix() != 1643118050 {
|
||||||
t.Fatal(moonPhase01)
|
t.Fatal(moonPhase01.Unix())
|
||||||
}
|
}
|
||||||
//-------------------
|
//-------------------
|
||||||
for i := 0; i < 26; i++ {
|
for i := 0; i < 26; i++ {
|
||||||
@@ -52,10 +52,3 @@ func Test_MoonPhaseDate(t *testing.T) {
|
|||||||
fmt.Println("上一朔月", moonPhase01)
|
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))
|
|
||||||
}
|
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_NEPTUNE_NEVER_RISE = errors.New("ERROR:极夜,海王星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_NEPTUNE_NEVER_RISE
|
err = ERR_NEPTUNE_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_NEPTUNE_NEVER_DOWN
|
err = ERR_NEPTUNE_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_NEPTUNE_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_NEPTUNE_NEVER_DOWN
|
err = ERR_NEPTUNE_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -205,7 +218,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextNeptuneRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextNeptuneRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+16
-4
@@ -7,8 +7,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestNeptune(t *testing.T) {
|
func TestNeptune(t *testing.T) {
|
||||||
date := time.Now().Add(time.Hour * -24)
|
tz := time.FixedZone("CST", 8*3600)
|
||||||
fmt.Println(CulminationTime(date, 115))
|
date := time.Date(2022, 01, 20, 00, 00, 00, 00, tz)
|
||||||
fmt.Println(RiseTime(date, 115, 23, 0, false))
|
if NextConjunction(date).Unix() != 1647171796 {
|
||||||
fmt.Println(DownTime(date, 115, 23, 0, false))
|
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))
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_SATURN_NEVER_RISE = errors.New("ERROR:极夜,木星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_SATURN_NEVER_RISE
|
err = ERR_SATURN_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_SATURN_NEVER_DOWN
|
err = ERR_SATURN_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_SATURN_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_SATURN_NEVER_DOWN
|
err = ERR_SATURN_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -205,7 +218,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextSaturnRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextSaturnRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+19
-3
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_STAR_NEVER_RISE = errors.New("ERROR:极夜,星星在今日永远在地平线下!")
|
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
|
// Constellation
|
||||||
@@ -52,11 +54,12 @@ func RiseTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (tim
|
|||||||
err = ERR_STAR_NEVER_RISE
|
err = ERR_STAR_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_STAR_NEVER_DOWN
|
err = ERR_STAR_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 星星降落时间
|
// DownTime 星星降落时间
|
||||||
//
|
//
|
||||||
// date, 世界时(忽略此处时区)
|
// date, 世界时(忽略此处时区)
|
||||||
@@ -67,6 +70,19 @@ func RiseTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (tim
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,是否进行大气修正
|
// aero,是否进行大气修正
|
||||||
func DownTime(date time.Time, ra, dec, lon, lat, height float64, aero bool) (time.Time, error) {
|
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
|
var err error
|
||||||
if date.Hour() > 12 {
|
if date.Hour() > 12 {
|
||||||
date = date.Add(time.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
|
err = ERR_STAR_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_STAR_NEVER_DOWN
|
err = ERR_STAR_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
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(tools.Format(ra/15, 1), tools.Format(dec, 0))
|
||||||
fmt.Println(RiseTime(now, ra, dec, 115, 40, 0, true))
|
fmt.Println(RiseTime(now, ra, dec, 115, 40, 0, true))
|
||||||
fmt.Println(CulminationTime(now, ra, 115))
|
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))
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-16
@@ -2,15 +2,16 @@ package sun
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"math"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"b612.me/astro/basic"
|
"b612.me/astro/basic"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_SUN_NEVER_RISE = errors.New("ERROR:极夜,太阳在今日永远在地平线下!")
|
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:今日晨昏朦影不存在!")
|
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 {
|
if date.Hour() > 12 {
|
||||||
date = date.Add(time.Hour * -12)
|
date = date.Add(time.Hour * -12)
|
||||||
}
|
}
|
||||||
|
//忽略时区的字面量时间
|
||||||
jde := basic.Date2JDE(date)
|
jde := basic.Date2JDE(date)
|
||||||
_, loc := date.Zone()
|
_, loc := date.Zone()
|
||||||
timezone := float64(loc) / 3600.0
|
timezone := float64(loc) / 3600.0
|
||||||
|
//risedate 时区修正后的时间,转换应当包括时区
|
||||||
riseJde := basic.GetSunRiseTime(jde, lon, lat, timezone, aeroFloat, height)
|
riseJde := basic.GetSunRiseTime(jde, lon, lat, timezone, aeroFloat, height)
|
||||||
if riseJde == -2 {
|
if riseJde == -2 {
|
||||||
err = ERR_SUN_NEVER_RISE
|
err = ERR_SUN_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_SUN_NEVER_DOWN
|
err = ERR_SUN_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SunDownTime 太阳落下时间
|
// deprecated: -- use SetTime instead
|
||||||
|
// DownTime 太阳落下时间
|
||||||
// date,当地时区日期,务必做时区修正
|
// date,当地时区日期,务必做时区修正
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
// lat,纬度,北正南负
|
// lat,纬度,北正南负
|
||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
if aero {
|
||||||
@@ -69,18 +83,18 @@ func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
jde := basic.Date2JDE(date)
|
jde := basic.Date2JDE(date)
|
||||||
_, loc := date.Zone()
|
_, loc := date.Zone()
|
||||||
timezone := float64(loc) / 3600.0
|
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 {
|
if downJde == -2 {
|
||||||
err = ERR_SUN_NEVER_RISE
|
err = ERR_SUN_NEVER_RISE
|
||||||
}
|
}
|
||||||
if downJde == -1 {
|
if downJde == -1 {
|
||||||
err = ERR_SUN_NEVER_DOWN
|
err = ERR_SUN_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(downJde, date.Location(), true), err
|
return basic.JDE2DateByZone(downJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// MorningTwilight 晨朦影
|
// MorningTwilight 晨朦影
|
||||||
// date,当地时区日期
|
// date,当地时区日期,返回的时间时区与此参数中的时区一致
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
// lat,纬度,北正南负
|
// lat,纬度,北正南负
|
||||||
// angle,朦影角度:可选-6 -12 -18(民用、航海、天文)
|
// angle,朦影角度:可选-6 -12 -18(民用、航海、天文)
|
||||||
@@ -99,11 +113,11 @@ func MorningTwilight(date time.Time, lon, lat, angle float64) (time.Time, error)
|
|||||||
if calcJde == -1 {
|
if calcJde == -1 {
|
||||||
err = ERR_TWILIGHT_NOT_EXISTS
|
err = ERR_TWILIGHT_NOT_EXISTS
|
||||||
}
|
}
|
||||||
return basic.JDE2Date(calcJde), err
|
return basic.JDE2DateByZone(calcJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// EveningTwilight 昏朦影
|
// EveningTwilight 昏朦影
|
||||||
// date,当地时区日期
|
// date,当地时区日期,返回的时间时区与此参数中的时区一致
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
// lat,纬度,北正南负
|
// lat,纬度,北正南负
|
||||||
// angle,朦影角度:可选-6 -12 -18(民用、航海、天文)
|
// angle,朦影角度:可选-6 -12 -18(民用、航海、天文)
|
||||||
@@ -123,7 +137,7 @@ func EveningTwilight(date time.Time, lon, lat, angle float64) (time.Time, error)
|
|||||||
if calcJde == -1 {
|
if calcJde == -1 {
|
||||||
err = ERR_TWILIGHT_NOT_EXISTS
|
err = ERR_TWILIGHT_NOT_EXISTS
|
||||||
}
|
}
|
||||||
return basic.JDE2Date(calcJde), err
|
return basic.JDE2DateByZone(calcJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// EclipticObliquity 黄赤交角
|
// EclipticObliquity 黄赤交角
|
||||||
@@ -176,7 +190,7 @@ func TrueLo(date time.Time) float64 {
|
|||||||
func TrueBo(date time.Time) float64 {
|
func TrueBo(date time.Time) float64 {
|
||||||
//转换为UTC时间
|
//转换为UTC时间
|
||||||
jde := basic.Date2JDE(date.UTC())
|
jde := basic.Date2JDE(date.UTC())
|
||||||
return basic.HSunTrueLo(basic.TD2UT(jde, true))
|
return basic.HSunTrueBo(basic.TD2UT(jde, true))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ApparentLo 太阳视黄经
|
// ApparentLo 太阳视黄经
|
||||||
@@ -256,10 +270,7 @@ func Zenith(date time.Time, lon, lat float64) float64 {
|
|||||||
// CulminationTime 太阳中天时间
|
// CulminationTime 太阳中天时间
|
||||||
// 返回给定经纬度、对应date时区date时刻的太阳中天日期
|
// 返回给定经纬度、对应date时区date时刻的太阳中天日期
|
||||||
func CulminationTime(date time.Time, lon float64) time.Time {
|
func CulminationTime(date time.Time, lon float64) time.Time {
|
||||||
jde := basic.Date2JDE(date)
|
jde := basic.Date2JDE(date.Add(time.Duration(-1*date.Hour())*time.Hour)) + 0.5
|
||||||
if jde-math.Floor(jde) > 0.5 {
|
|
||||||
jde++
|
|
||||||
}
|
|
||||||
_, loc := date.Zone()
|
_, loc := date.Zone()
|
||||||
timezone := float64(loc) / 3600.0
|
timezone := float64(loc) / 3600.0
|
||||||
calcJde := basic.GetSunTZTime(jde, lon, timezone) - timezone/24.00
|
calcJde := basic.GetSunTZTime(jde, lon, timezone) - timezone/24.00
|
||||||
|
|||||||
+23
-3
@@ -2,13 +2,33 @@ package sun
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSun(t *testing.T) {
|
func TestSun(t *testing.T) {
|
||||||
now := time.Now()
|
ja, err := time.LoadLocation("Asia/Tokyo")
|
||||||
fmt.Println(RiseTime(now, 115, 40, 0, true))
|
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(CulminationTime(now, 115))
|
||||||
fmt.Println(DownTime(now, 115, 40, 0, true))
|
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 {
|
func Limit360(x float64) float64 {
|
||||||
for x > 360 {
|
x = math.Mod(x, 360)
|
||||||
x -= 360
|
if x < 0 {
|
||||||
}
|
|
||||||
for x < 0 {
|
|
||||||
x += 360
|
x += 360
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_URANUS_NEVER_RISE = errors.New("ERROR:极夜,天王星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_URANUS_NEVER_RISE
|
err = ERR_URANUS_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_URANUS_NEVER_DOWN
|
err = ERR_URANUS_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_URANUS_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_URANUS_NEVER_DOWN
|
err = ERR_URANUS_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -205,7 +218,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextUranusRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextUranusRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+17
-4
@@ -10,7 +10,9 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ERR_VENUS_NEVER_RISE = errors.New("ERROR:极夜,金星今日永远在地平线下!")
|
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 视黄经
|
// ApparentLo 视黄经
|
||||||
@@ -122,11 +124,12 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
err = ERR_VENUS_NEVER_RISE
|
err = ERR_VENUS_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_VENUS_NEVER_DOWN
|
err = ERR_VENUS_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deprecated: -- use SetTime instead
|
||||||
// DownTime 落下时间
|
// DownTime 落下时间
|
||||||
// date,取日期,时区忽略
|
// date,取日期,时区忽略
|
||||||
// lon,经度,东正西负
|
// lon,经度,东正西负
|
||||||
@@ -134,6 +137,16 @@ func RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, e
|
|||||||
// height,高度
|
// height,高度
|
||||||
// aero,true时进行大气修正
|
// aero,true时进行大气修正
|
||||||
func DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error) {
|
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 err error
|
||||||
var aeroFloat float64
|
var aeroFloat float64
|
||||||
if aero {
|
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
|
err = ERR_VENUS_NEVER_RISE
|
||||||
}
|
}
|
||||||
if riseJde == -1 {
|
if riseJde == -1 {
|
||||||
err = ERR_VENUS_NEVER_DOWN
|
err = ERR_VENUS_NEVER_SET
|
||||||
}
|
}
|
||||||
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
return basic.JDE2DateByZone(riseJde, date.Location(), true), err
|
||||||
}
|
}
|
||||||
@@ -233,7 +246,7 @@ func LastRetrogradeToPrograde(date time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
// NextRetrogradeToPrograde 上次留(逆转瞬)
|
||||||
//// 返回上次逆转瞬留的时间
|
// // 返回上次逆转瞬留的时间
|
||||||
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
func NextRetrogradeToPrograde(date time.Time) time.Time {
|
||||||
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
jde := basic.TD2UT(basic.Date2JDE(date.UTC()), true)
|
||||||
return basic.JDE2DateByZone(basic.NextVenusRetrogradeToPrograde(jde), date.Location(), false)
|
return basic.JDE2DateByZone(basic.NextVenusRetrogradeToPrograde(jde), date.Location(), false)
|
||||||
|
|||||||
+1
-1
@@ -10,5 +10,5 @@ func TestVenus(t *testing.T) {
|
|||||||
date := time.Now().Add(time.Hour * -24)
|
date := time.Now().Add(time.Hour * -24)
|
||||||
fmt.Println(CulminationTime(date, 115))
|
fmt.Println(CulminationTime(date, 115))
|
||||||
fmt.Println(RiseTime(date, 115, 23, 0, false))
|
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