[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