1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
Description: fix some error on 23o'clock and show "big hour" in lunar
1. incorrect Jie-alert at 23o'clock
2. need "big hour" for lunar
3. lunar to/from solar is diff
---
Origin: luckystar <hymanchou@189.cn>
Bug-Debian: https://bugs.debian.org/977439
Reviewed-By: xiao sheng wen <atzlinux@sina.com>
Last-Update: 2020-12-16
--- old/lunar.c 2020-12-05 11:13:54.901959460 +0800
+++ new/lunar.c 2020-12-05 11:29:05.194918875 +0800
@@ -410,15 +410,23 @@
offset = Solar2Day(&solar);
solar.weekday = (offset + SolarFirstDate.weekday) % 7;
- /* A lunar day begins at 11 p.m. */
+ /* A lunar day begins at 11 p.m. of last day */
if (solar.hour == 23)
+ {
offset++;
+ Day2Solar(offset, &solar);
+ jieAlert = JieDate(&solar, &lunar2);
+ Day2Solar(offset - 1, &solar);
+ }
+ else
+ {
+ jieAlert = JieDate(&solar, &lunar2);
+ }
Day2Lunar(offset, &lunar);
lunar.hour = solar.hour;
CalGZ(offset, &lunar, &gan, &zhi);
- jieAlert = JieDate(&solar, &lunar2);
lunar2.day = lunar.day;
lunar2.hour = lunar.hour;
CalGZ(offset, &lunar2, &gan2, &zhi2);
@@ -430,15 +438,28 @@
long offset;
int adj;
- /* A solar day begins at 12 a.m. */
- adj = (lunar.hour == 23)? -1 : 0;
offset = Lunar2Day(&lunar);
- solar.weekday = (offset+ adj + SolarFirstDate.weekday) % 7;
- Day2Solar(offset + adj, &solar);
+ solar.weekday = (offset + SolarFirstDate.weekday) % 7;
+ Day2Solar(offset, &solar);
solar.hour = lunar.hour;
+
+ /* A lunar day begins at 11 p.m. of last day */
+ if (lunar.hour == 23)
+ {
+ Day2Lunar(offset + 1, &lunar);
+ offset = Lunar2Day(&lunar);
+ Day2Solar(offset, &solar);
+ jieAlert = JieDate(&solar, &lunar2);
+ Day2Solar(offset - 1, &solar);
+ }
+ else
+ {
+ jieAlert = JieDate(&solar, &lunar2);
+ }
+
CalGZ(offset, &lunar, &gan, &zhi);
- jieAlert = JieDate(&solar, &lunar2);
+
lunar2.day = lunar.day;
lunar2.hour = lunar.hour;
CalGZ(offset, &lunar2, &gan2, &zhi2);
@@ -902,9 +923,9 @@
{
printf("Solar : %d.%d.%d.%d\t%s\n", solar.year, solar.month, solar.day,
solar.hour, weekday[solar.weekday]);
- printf("Lunar : %d.%d%s.%d.%d\tShengXiao: %s\n",
+ printf("Lunar : %d.%d%s.%d.%s\tShengXiao: %s\n",
lunar.year, lunar.month, (lunar.leap?"Leap":""), lunar.day,
- lunar.hour, ShengXiao[zhi.year] );
+ Zhi[zhi.hour], ShengXiao[zhi.year] );
printf("GanZhi: %s-%s.%s-%s.%s-%s.%s-%s\n",
Gan[gan.year], Zhi[zhi.year], Gan[gan.month], Zhi[zhi.month],
Gan[gan.day], Zhi[zhi.day], Gan[gan.hour], Zhi[zhi.hour]);
@@ -938,9 +959,9 @@
{
printf("Solar : %d.%d.%d.%d\t%s\n", solar.year, solar.month, solar.day,
solar.hour, weekday[solar.weekday]);
- printf("Lunar : %d.%d%s.%d.%d\tShengXiao: %s\n",
+ printf("Lunar : %d.%d%s.%d.%s\tShengXiao: %s\n",
lunar.year, lunar.month, (lunar.leap?"Leap":""), lunar.day,
- lunar.hour, ShengXiao[zhi.year] );
+ Zhi[zhi.hour], ShengXiao[zhi.year] );
printf("GanZhi: \n\n");
display3(gan.year+GanBM, zhi.year+ZhiBM, NianBM);
display3(gan.month+GanBM, zhi.month+ZhiBM, YueBM);
|