6tail / lunar-java

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

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

Open a316375 opened 1 year ago

a316375 commented 1 year ago

我明明设置一个【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 】

6tail commented 1 year ago

Calendar要设置时区。

xuanyunhui commented 1 year ago

https://github.com/6tail/lunar-java/blob/1aefcdcf0c51ff5248caa9a73abd8c220fea273a/src/main/java/com/nlf/calendar/Solar.java#L198 用这个方法不就不用转换了

6tail commented 1 year ago

Calendar和Date都需要注意时区。

patience00 commented 2 months ago

刚开始我也以为不对, 翻看了文档才发现是自己使用方法有问题, 目前验证出来的都没有问题, 我只能说大佬太牛皮了, 请收下我的膝盖, 这些质疑有错误的issues我觉得可以关了