GithubHelp home page GithubHelp logo

6tail / lunar-java Goto Github PK

View Code? Open in Web Editor NEW
647.0 13.0 146.0 743 KB

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

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

License: MIT License

Java 100.00%
java calendar lunar

lunar-java's Introduction

lunar License

lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)、道历、佛历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道日及吉凶、法定节假日及调休等。

支持java 1.5及以上版本。

干支纪年:支持以正月初一计,支持以立春当日计,支持以立春交接时刻计。

干支纪月:支持以节当日计,支持以节交接时刻计。

English

Maven

<dependency>
  <groupId>cn.6tail</groupId>
  <artifactId>lunar</artifactId>
  <version>1.3.14</version>
</dependency>

下载jar

如果使用jar,建议下载最新的版本,bug将得到及时的修复。

Download

示例

import com.nlf.calendar.Lunar;
 
/**
 * 阴历示例
 *
 */
public class LunarSample{
  public static void main(String[] args){
    //今天
    //Lunar date = new Lunar();
     
    //指定阴历的某一天
    Lunar date = new Lunar(1986,4,21);
    System.out.println(date.toFullString());
    System.out.println(date.getSolar().toFullString());
  }
}

输出结果:

一九八六年四月廿一 丙寅(虎)年 癸巳(蛇)月 癸酉(鸡)日 子(鼠)时 纳音[炉中火 长流水 剑锋金 桑柘木] 星期四 北方玄武 星宿[斗木獬](吉) 彭祖百忌[癸不词讼理弱敌强 酉不会客醉坐颠狂] 喜神方位[巽](东南) 阳贵神方位[巽](东南) 阴贵神方位[震](正东) 福神方位[兑](正西) 财神方位[离](正南) 冲[(丁卯)兔] 煞[东]
1986-05-29 00:00:00 星期四 双子座

文档

请移步至 https://6tail.cn/calendar/api.html

Star History

Star History Chart

lunar-java's People

Contributors

6tail avatar

Stargazers

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

Watchers

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

lunar-java's Issues

月柱是不是有问题?

农历1970年六月初五在中华万年历APP内的月柱显示为癸未,本库对应的月柱为壬午

当节气间隔为16天时,物候算法异常以及疑问

版本: v1.2.18
语言: java
错误描述: 版本新增的物候,其中计算方式取两个节气相差天数除以5作为参数计算,但是节气之间相差天数可能>15天,比如2022年5月5日为“立夏”、2022年5月21为“小满”,两节气相差16天,导致5月20日结果计算异常
code eg:(5月20日)
lunar.getHou() == "立夏 初候“;
lunar.getWuhou() == "苦菜秀";

疑问:现在第16天被算做”初候“,实际上如果超过15天的也算”三候“???

java公历转农历速度有点慢

我把一个月的公历的全部日子都转换为农历,发现大概需要1.5-2秒,感觉有点慢,不知道是不是使用的方式不对?
语法是kotlin,我单独测试过Date.from(day.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())这个是不耗时的

val lunarDate = Lunar.fromDate(Date.from(day.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()))
val subText = if (lunarDate.day == 1) {
    lunarDate.monthInChinese + ""
} else {
    lunarDate.dayInChinese
}

lunar类的干支方法返回错误

java lunar对象get干支,结果错误,用eightchar没没问题。时间2022年4月6日20点18分。返回己丑,己丑,己丑,甲戌

二十四节气日期在2021年计算有误

2021年冬至对应国历是12月21日;

根据一下代码计算是

package com.nlf.calendar.lunar;

import cn.hutool.core.date.ChineseDate;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;
import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

public class LunarTest {
    @Test
    public void testGetJieQiTable() throws ParseException {
        SimpleDateFormat stringToDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = stringToDateFormat.parse("2022-12-25 00:00:00");
        Lunar lunar = new Lunar(date);
        Map<String,Solar> jieQiTable = lunar.getJieQiTable();
        Console.log(jieQiTable);
    }
}

运行结果:

{冬至=2021-12-22, 小寒=2022-01-05, 大寒=2022-01-20, 立春=2022-02-04, 雨水=2022-02-19, 惊蛰=2022-03-05, 春分=2022-03-20, 清明=2022-04-05, 谷雨=2022-04-20, 立夏=2022-05-05, 小满=2022-05-21, 芒种=2022-06-06, 夏至=2022-06-21, 小暑=2022-07-07, 大暑=2022-07-23, 立秋=2022-08-07, 处暑=2022-08-23, 白露=2022-09-07, 秋分=2022-09-23, 寒露=2022-10-08, 霜降=2022-10-23, 立冬=2022-11-07, 小雪=2022-11-22, 大雪=2022-12-07}

1991-05-12 的日干支好像错了

1992-05-12,用我们的库得到的日干支是: 辛巳

一九九一年三月廿七 辛未(羊)年 癸巳(蛇)月 辛巳(蛇)日

但我查了其它好多地方,都是: 壬午

Lunar.fromDate得出的农历是错误的

取了我现在的时间戳: 681231600000 初始化后打印出农历: 二〇二一年冬月十一 ,这个是正确的
时间戳替换成: 681231600000 初始化后打印出农历: 一九九一年六月廿三, 这个是错误的,正确的应该一九九一年六月廿四

ps: dart版本是正确的

有很多年份的1月1日无法初始化

以下年份都无法初始化1月1日,我用循环测了一下
41、193、288、345、459、497、516、554、698、755、793、918、1013、1051、1070、1127、1146、1165、1423、1442、1461、1518、1537、1556
WX20230310-182144@2x
WX20230310-182711@2x

沒有檢查農歷大小月

貳零貳零年正月三十 庚子(鼠)年 戊寅(虎)月 丙申(猴)日 子(鼠)時 納音[壁上土 城頭土 山下火 海中金] 星期日 北方玄武 執星[破] 星宿虛日鼠 彭祖百忌[丙不修灶必見災殃 申不安床鬼祟入房] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(庚寅)虎] 煞[南]
2020-02-23 00:00:00 閏年 星期日 雙魚座
[庚子, 戊寅, 丙申, 戊子]
貳零貳零年貳月三十 庚子(鼠)年 己卯(兔)月 乙丑(牛)日 子(鼠)時 納音[壁上土 城頭土 海中金 海中金] 星期一 北方玄武 執星[開] 星宿危月燕 彭祖百忌[乙不栽植千株不長 丑不冠帶主不還鄉] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(己未)羊] 煞[東]
2020-03-23 00:00:00 閏年 星期一 白羊座
[庚子, 己卯, 乙丑, 丙子]
貳零貳零年叁月三十 庚子(鼠)年 庚辰(龍)月 乙未(羊)日 子(鼠)時 納音[壁上土 白蠟金 沙中金 海中金] 星期三 北方玄武 執星[平] 星宿壁水獝 彭祖百忌[乙不栽植千株不長 未不服藥毒氣入腸] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(己丑)牛] 煞[西]
2020-04-22 00:00:00 閏年 星期三 金牛座
[庚子, 庚辰, 乙未, 丙子]
貳零貳零年肆月三十 庚子(鼠)年 辛巳(蛇)月 乙丑(牛)日 子(鼠)時 納音[壁上土 白蠟金 海中金 海中金] 星期五 西方白虎 執星[成] 星宿婁金狗 彭祖百忌[乙不栽植千株不長 丑不冠帶主不還鄉] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(己未)羊] 煞[東]
2020-05-22 00:00:00 閏年 星期五 雙子座
[庚子, 辛巳, 乙丑, 丙子]
貳零貳零年伍月三十 庚子(鼠)年 癸未(羊)月 甲子(鼠)日 子(鼠)時 納音[壁上土 楊柳木 海中金 海中金] 星期一 西方白虎 執星[執] 星宿畢月烏 彭祖百忌[甲不開倉財物耗散 子不問卜自惹禍殃] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(戊午)馬] 煞[南]
2020-07-20 00:00:00 閏年 星期一 巨蟹座
[庚子, 癸未, 甲子, 甲子]
貳零貳零年陸月三十 庚子(鼠)年 甲申(猴)月 甲午(馬)日 子(鼠)時 納音[壁上土 泉中水 沙中金 海中金] 星期三 西方白虎 執星[開] 星宿參水猿 彭祖百忌[甲不開倉財物耗散 午不苫蓋屋主更張] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(戊子)鼠] 煞[北]
2020-08-19 00:00:00 閏年 星期三 獅子座
[庚子, 甲申, 甲午, 甲子]
貳零貳零年柒月三十 庚子(鼠)年 乙酉(雞)月 癸亥(豬)日 子(鼠)時 納音[壁上土 泉中水 大海水 海中金] 星期四 南方朱雀 執星[滿] 星宿井木犴 彭祖百忌[癸不詞訟理弱敵強 亥不嫁娶不利新郎] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(丁巳)蛇] 煞[西]
2020-09-17 00:00:00 閏年 星期四 處女座
[庚子, 乙酉, 癸亥, 壬子]
貳零貳零年捌月三十 庚子(鼠)年 丙戌(狗)月 壬辰(龍)日 子(鼠)時 納音[壁上土 屋上土 長流水 海中金] 星期五 南方朱雀 執星[破] 星宿鬼金羊 彭祖百忌[壬不泱水更難提防 辰不哭泣必主重喪] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(丙戌)狗] 煞[南]
2020-10-16 00:00:00 閏年 星期五 天秤座
[庚子, 丙戌, 壬辰, 庚子]
貳零貳零年玖月三十 庚子(鼠)年 丁亥(豬)月 壬戌(狗)日 子(鼠)時 納音[壁上土 屋上土 大海水 海中金] 星期日 南方朱雀 執星[閉] 星宿星日馬 彭祖百忌[壬不泱水更難提防 戌不吃犬作怪上床] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(丙辰)龍] 煞[北]
2020-11-15 00:00:00 閏年 星期日 天蠍座
[庚子, 丁亥, 壬戌, 庚子]
貳零貳零年拾月三十 庚子(鼠)年 戊子(鼠)月 辛卯(兔)日 子(鼠)時 納音[壁上土 霹靂火 松柏木 海中金] 星期一 南方朱雀 執星[平] 星宿張月鹿 彭祖百忌[辛不合醬主人不嘗 卯不穿井水泉不香] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(乙酉)雞] 煞[西]
2020-12-14 00:00:00 閏年 星期一 射手座
[庚子, 戊子, 辛卯, 戊子]
貳零貳零年冬月三十 庚子(鼠)年 己丑(牛)月 辛酉(雞)日 子(鼠)時 納音[壁上土 霹靂火 石榴木 海中金] 星期三 南方朱雀 執星[成] 星宿軫水蚓 彭祖百忌[辛不合醬主人不嘗 酉不會客醉坐顛狂] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(乙卯)兔] 煞[東]
2021-01-13 00:00:00 星期三 摩羯座
[庚子, 己丑, 辛酉, 戊子]
貳零貳零年臘月三十 庚子(鼠)年 戊寅(虎)月 庚寅(虎)日 子(鼠)時 納音[壁上土 城頭土 松柏木 海中金] 星期四 (除夕) 東方青龍 執星[建] 星宿角木蛟 彭祖百忌[庚不經絡織機虛張 寅不祭祀神鬼不嘗] 喜神方位 陽貴神方位 陰貴神方位 福神方位 財神方位 冲[(甲申)猴] 煞[北]
2021-02-11 00:00:00 星期四 水瓶座
[庚子, 戊寅, 庚寅, 丙子]

节假日工具类小bug

image

已存在的节日数据无法删除

image
如图,设置01-04为工作日,调用 fix() 方法。删掉01-04,再调用 fix() 方法后,DATA_IN_USE 中01-04 日期不会删除

Lunar阳历日期转换出错,算法不对

我明明设置一个【1986-9-1 00:02:02 】的数据,并且转换成为一个13位的时间戳, 根据时间戳导入后-转换后竟然变成【1986-08-31 23:02:02 】

这个时间戳计算差了1天,连日期都改变了 //实测 Andriod Java 运行日期计算错误,时间戳转换日期出错

//设置一个1986-9-1 的数据
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,1986);
calendar.set(Calendar.MONTH,8);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 2);
calendar.set(Calendar.SECOND, 2);

                 //SimpleDateFormat来输出规范的字符串 拿到时间戳
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
                        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));  //上海,对应正八区
                        String format = sdf.format(calendar.getTime());//拿到时间戳
                        System.out.println("Calendar 1986-9-1 转换后时间戳"+format+calendar.getTime().getTime() );

                     
                        System.out.println("Lunar阳历日期:"+ Solar.fromDate(new Date(calendar.getTime().getTime())).getLunar().getSolar().toFullString());

打印结果
Lunar阳历日期:1986-08-31 23:02:02 星期日 处女座
我明明设置一个【1986-9-1 00:02:02 】的数据,并且转换成为一个时间戳, 导入后-转换后竟然变成【1986-08-31 23:02:02 】

使用toFullString() API 报错

Solar solar1 = new Solar(year,3,22);
System.out.println(solar1.toFullString());
System.out.println(solar1.getLunar().toFullString());

上述代码会导致数组下标越界 day 参数为23 也会

缺少万圣节

发现SolarUtil里面的节日表中漏了万圣节,是原本就没打算支持万圣节么?

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

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

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.