Package: lunar
Version: 2.2-8
Severity: normal

Hi,
The attachment is a substitute of 22_patch within lunar_2.2-8
for the following bugs:

*** bugs_testing_scripts-with_results.txt
Here is some simple bash-scripts for testing with results:

1. different datetime when query luan to/from solar:
diff <(lunar=./usr/bin/lunar; y=1908; m=2; d=3; i=''; for h in `seq 0 72`; do 
let dd=$d+$[h/24]; h=$[h%24]; $lunar -u -s $i $y $m $dd $h | sed -n '3{N;s/\n/ 
\| /p}'; done) <(lunar=./usr/bin/lunar; y=1908; m=1; d=2; i='-i'; for h in `seq 
0 72`; do let dd=$d+$[h/24]; h=$[h%24]; $lunar -u -s $i $y $m $dd $h | sed -n 
'3{N;s/\n/ \| /p}'; done) 

1c1
< 阳历: 1908年 2月 3日 0时 星期一 | 阴历: 1908年 1月 2日子时 生肖属猴
---
> 阳历: 1908年 2月 2日 0时 星期日 | 阴历: 1908年 1月 2日子时 生肖属猴
24,25c24,25
< 阳历: 1908年 2月 3日23时 星期一 | 阴历: 1908年 1月 3日子时 生肖属猴
< 阳历: 1908年 2月 4日 0时 星期二 | 阴历: 1908年 1月 3日子时 生肖属猴
---
> 阳历: 1908年 2月 3日23时 星期一 | 阴历: 1908年 1月 2日子时 生肖属猴
> 阳历: 1908年 2月 3日 0时 星期一 | 阴历: 1908年 1月 3日子时 生肖属猴
48,49c48,49
< 阳历: 1908年 2月 4日23时 星期二 | 阴历: 1908年 1月 4日子时 生肖属猴
< 阳历: 1908年 2月 5日 0时 星期三 | 阴历: 1908年 1月 4日子时 生肖属猴
---
> 阳历: 1908年 2月 4日23时 星期二 | 阴历: 1908年 1月 3日子时 生肖属猴
> 阳历: 1908年 2月 4日 0时 星期二 | 阴历: 1908年 1月 4日子时 生肖属猴
72,73c72,73
< 阳历: 1908年 2月 5日23时 星期三 | 阴历: 1908年 1月 5日子时 生肖属猴
< 阳历: 1908年 2月 6日 0时 星期四 | 阴历: 1908年 1月 5日子时 生肖属猴
---
> 阳历: 1908年 2月 5日23时 星期三 | 阴历: 1908年 1月 4日子时 生肖属猴
> 阳历: 1908年 2月 5日 0时 星期三 | 阴历: 1908年 1月 5日子时 生肖属猴

2. "jie_alarm" at 0 - 23 o'clock, correct one is at 23 - 22:
 (lunar=./usr/bin/lunar; y=1908; m=2; d=4; i=''; for h in 22 23 24 47; do let 
dd=$d+$[h/24]; h=$[h%24]; $lunar -u -s $i $y $m $dd $h; done) 

Lunar Version 2.2-8 (Debian) (May 16, 2020)

阳历: 1908年 2月 4日22时 星期二
阴历: 1908年 1月 3日亥时 生肖属猴
干支: 戊申年 甲寅月 己丑日 乙亥时 
用四柱神算推算之时辰八字: 丁未年 癸丑月 己丑日 乙亥时 
Lunar Version 2.2-8 (Debian) (May 16, 2020)

阳历: 1908年 2月 4日23时 星期二
阴历: 1908年 1月 4日子时 生肖属猴
干支: 戊申年 甲寅月 庚寅日 丙子时 
用四柱神算推算之时辰八字: 丁未年 癸丑月 庚寅日 丙子时 
Lunar Version 2.2-8 (Debian) (May 16, 2020)

阳历: 1908年 2月 5日 0时 星期三
阴历: 1908年 1月 4日子时 生肖属猴
干支: 戊申年 甲寅月 庚寅日 丙子时 
用四柱神算推算之时辰八字: 戊申年 甲寅月 庚寅日 丙子时 
* 是日为节, 月柱可能要修改
* 年柱亦可能要修改
* 请查有节气时间之万年历
Lunar Version 2.2-8 (Debian) (May 16, 2020)

阳历: 1908年 2月 5日23时 星期三
阴历: 1908年 1月 5日子时 生肖属猴
干支: 戊申年 甲寅月 辛卯日 戊子时 
用四柱神算推算之时辰八字: 戊申年 甲寅月 辛卯日 戊子时 
* 是日为节, 月柱可能要修改
* 年柱亦可能要修改
* 请查有节气时间之万年历

3. for en, lunar using "big hour", e.g: zi3...etc. since "big hour" never 
bigger then 12:

./usr/bin/lunar

Lunar Version 2.2-8 (Debian) (May 16, 2020)

Solar : 2020.12.13.16   Sunday
Lunar : 2020.10.29.16   ShengXiao: Mouse
GanZhi: Geng1-Zi3.Ding1-Hai4.Geng1-Yin2.Jia3-Shen1
        (GanZhi Order)  7-1.4-12.7-3.1-9
        (JiaZi Cycle)   37.24.27.21

BaZi (8-characters) according to 'Four Column Calculation':
        Geng1-Zi3.Wu4-Zi3.Geng1-Yin2.Jia3-Shen1
        (GanZhi Order)  7-1.5-1.7-3.1-9
        (JiaZi Cycle)   37.25.27.21

4 datetime-go-back testing with results:
4.1 solar to lunar, correct:
 (lunar=./usr/bin/lunar; y=1908; m=2; d=3; i=''; for h in `seq 0 72`; do let 
dd=$d+$[h/24]; h=$[h%24]; $lunar -u -s $i $y $m $dd $h | sed -n '3{N;s/\n/ \| 
/p}'; done)
阳历: 1908年 2月 3日 0时 星期一 | 阴历: 1908年 1月 2日子时 生肖属猴
...........
阳历: 1908年 2月 3日22时 星期一 | 阴历: 1908年 1月 2日亥时 生肖属猴
阳历: 1908年 2月 3日23时 星期一 | 阴历: 1908年 1月 3日子时 生肖属猴
阳历: 1908年 2月 4日 0时 星期二 | 阴历: 1908年 1月 3日子时 生肖属猴
阳历: 1908年 2月 4日 1时 星期二 | 阴历: 1908年 1月 3日丑时 生肖属猴
...........
阳历: 1908年 2月 4日22时 星期二 | 阴历: 1908年 1月 3日亥时 生肖属猴
阳历: 1908年 2月 4日23时 星期二 | 阴历: 1908年 1月 4日子时 生肖属猴
阳历: 1908年 2月 5日 0时 星期三 | 阴历: 1908年 1月 4日子时 生肖属猴
阳历: 1908年 2月 5日 1时 星期三 | 阴历: 1908年 1月 4日丑时 生肖属猴
.............
阳历: 1908年 2月 5日22时 星期三 | 阴历: 1908年 1月 4日亥时 生肖属猴
阳历: 1908年 2月 5日23时 星期三 | 阴历: 1908年 1月 5日子时 生肖属猴
阳历: 1908年 2月 6日 0时 星期四 | 阴历: 1908年 1月 5日子时 生肖属猴

4.2 lunar to solar, incorrect:
 (lunar=./usr/bin/lunar; y=1908; m=2; d=3; i='-i'; for h in `seq 0 72`; do let 
dd=$d+$[h/24]; h=$[h%24]; $lunar -u -s $i $y $m $dd $h | sed -n '3{N;s/\n/ \| 
/p}'; done)

阳历: 1908年 2月 2日 0时 星期日 | 阴历: 1908年 1月 2日子时 生肖属猴
.........
阳历: 1908年 2月 3日22时 星期一 | 阴历: 1908年 1月 2日亥时 生肖属猴
阳历: 1908年 2月 3日23时 星期一 | 阴历: 1908年 1月 2日子时 生肖属猴
                       ^
              the time | go back here
                       V
阳历: 1908年 2月 3日 0时 星期一 | 阴历: 1908年 1月 3日子时 生肖属猴
.........
阳历: 1908年 2月 4日23时 星期二 | 阴历: 1908年 1月 3日子时 生肖属猴
                       ^
              the time | go back here
                       V
阳历: 1908年 2月 4日 0时 星期二 | 阴历: 1908年 1月 4日子时 生肖属猴
.............
阳历: 1908年 2月 5日23时 星期三 | 阴历: 1908年 1月 4日子时 生肖属猴
阳历: 1908年 2月 5日 0时 星期三 | 阴历: 1908年 1月 5日子时 生肖属猴


-- System Information:
Debian Release: 6.0.10
  APT prefers squeeze-lts
  APT policy: (500, 'squeeze-lts'), (500, 'oldoldstable-updates'), (500, 
'oldoldstable-proposed-updates'), (500, 'oldoldstable')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-5-486
Locale: LANG=zh_CN.UTF-8, LC_CTYPE=zh_CN.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
--- 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);

Reply via email to