[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:19862] Re: [Y2K] mnews-1.22
吉藤英明@東北大学情報科学です。
In article <20000101164857D.yoshfuji@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> (at Sat, 1 Jan 2000 16:48:59 +0900), Hideaki YOSHIFUJI (吉藤英明) <yoshfuji@xxxxxxxxxxxxxxxxx> says:
> > 日付の年の部分は2桁か4桁しかありえず、1970年以前のメイルを扱う可能性が
> > ないとすれば、こうなるかな。
> >
> > if ((*year >= 0) && (*year < 100)) {
> > *year += (*year < 70) ? 2000 : 1900;
> > }
>
> ですね。
>
> 後あるとすれば、現在日付 ±50年 という方法でしょうか。
この方針で実装しました(draft-ietf-drums-msg-fmt-07より
50未満を2000年代としています)。さきほどのパッチを破棄して、
あてて下さい。
#"40" とかくると変になるのは仕方ないんでしょうね。
--- mnews-1.22/src/mnews.c Wed Dec 15 00:29:56 1999
+++ mnews-1.22.fix3-y2k.2/src/mnews.c Sat Jan 1 18:36:28 2000
@@ -2815,6 +2815,11 @@
int offset;
int jst_flag;
+#ifndef Y2K_USE_STATIC_SOLUTION
+ time_t now;
+ struct tm *tmnow;
+#endif
+
*year = 0;
*month = 0;
*date = 0;
@@ -2823,6 +2828,11 @@
*minute = 0;
*second = 0;
+#ifndef Y2K_USE_STATIC_SOLUTION
+ now = time((time_t*)NULL);
+ tmnow = gmtime(&now);
+#endif
+
while ((*dates == ' ') || (*dates == '\t')) {
dates++;
}
@@ -2870,8 +2880,27 @@
}
dates = next_param(dates);
*year = atoi(dates); /* 年 */
- if ((*year > 0) && (*year < 1000)) {
- *year += 1900;
+ if ((*year >= 0) && (*year < 1000)){
+#ifdef Y2K_DONT_CONVERT_YEAR_00XX
+ for (i = 0; i < 5; i++)
+ if (dates[i] == '\0' || !isdigit(dates[i])) break;
+ if (i < 4){
+#endif
+ /* [Y2K] 1〜3桁年表示日付変換 */
+#ifdef Y2K_USE_STATIC_SOLUTION
+ *year += (*year < 50) ? 2000 : 1900; /* draft-ietf-drums-msg-fmt-07 */
+#else
+ if (*year < 100){
+ /* 現在年±50年 */
+ *year += tmnow->tm_year - (tmnow->tm_year % 100);
+ if (*year - tmnow->tm_year >= 50)
+ *year -= 100;
+ }
+ *year += 1900;
+#endif /* Y2K_USE_STATIC_SOLUTION / !Y2K_USE_STATIC_SOLUTION */
+#ifdef Y2K_DONT_CONVERT_YEAR_00XX
+ }
+#endif
}
dates = next_param(dates);
} else { /* Date, Day Month Year Time Zone */
@@ -2885,8 +2914,27 @@
}
dates = next_param(dates);
*year = atoi(dates); /* 年 */
- if ((*year > 0) && (*year < 1000)) {
- *year += 1900;
+ if ((*year >= 0) && (*year < 1000)){
+#ifdef Y2K_DONT_CONVERT_YEAR_00XX
+ for (i = 0; i < 5; i++)
+ if (dates[i] == '\0' || !isdigit(dates[i])) break;
+ if (i < 4){
+#endif
+ /* [Y2K] 1〜3桁年表示日付変換 */
+#ifdef Y2K_USE_STATIC_SOLUTION
+ *year += (*year < 50) ? 2000 : 1900; /* draft-ietf-drums-msg-fmt-07 */
+#else
+ if (*year < 100){
+ /* 現在年±50年 */
+ *year += tmnow->tm_year - (tmnow->tm_year % 100);
+ if (*year - tmnow->tm_year >= 50)
+ *year -= 100;
+ }
+ *year += 1900;
+#endif /* Y2K_USE_STATIC_SOLUTION / !Y2K_USE_STATIC_SOLUTION */
+#ifdef Y2K_DONT_CONVERT_YEAR_00XX
+ }
+#endif
}
dates = next_param(dates);
*hour = atoi(dates); /* 時 */
--
吉藤英明 (YOSHIFUJI,Hideaki) <yoshfuji@xxxxxxxxxxxxxxxxx>
Web Page: http://www.ecei.tohoku.ac.jp/%7Eyoshfuji/
PGP5i FP: F731 6599 5EB2 BBA7 1515 1323 1806 A96F 5700 6B25