[H8-ML(4775)] Re: H8/3664にて日付演算
From: FUJIHARA Keiichi <keiichi@xxxxxxxxxxxxx>
Date: 2004年05月12日(水)08時45分47秒
藤原です。
そうですね、間違えてましたね。


DateTimeString[ SECOND_0 ]++;

if( DateTimeString[ SECOND_0 ] > '9' )
{
   DateTimeString[ SECOND_0 ] = '0';
   DateTimeString[ SECOND_10 ]++;
}

if( DateTimeString[ SECOND_10 ] > '5' )
{
   DateTimeString[ SECOND_10 ] = '0';
   DateTimeString[ MINUTES_0 ]++;
}

です。
と、これだけではなんなので、

char times[7];
char limit[7] = "235959";
int i;

/* このあたりで初期化 */

times[5]++;
for(i = 5; i >= 0; i--)
{
  if (times[i] > limit[i])
  {
     times[i] = '0';
     /* ここがいやらしい */
     if (i != 0)
        times[i - 1]++;
   }
}

とか。
もちろん、間に、':' や '/' や '-' がある場合には使えません。

さらに一般化すると、

char times[] = "00:00:00";
char limit[] = "23:59:59";
int  index[] = {7, 6, 4, 3, 1, 0, -1};
int i;

/* このあたりで初期化 */

times[index[0]]++;
for(i = 0; index[i] >= 0; i++)
{
  if (times[index[i]] > limit[index[i]])
  {
     times[index[i]] = '0';
     /* ここがいやらしい */
     if (index[i + 1])
        times[index[i + 1]]++;
   }
}

なんてできことはできますが。このあたりはやりすぎでしょう。

これ、もともとの発想の違いは、
「正しい形を保持しつつ処理する」か、「処理をしたあとで、正しい形に
なおす」かの違いのような気もします。

 お察しの通り、私は、「処理をする」→「つじつまを合わせる」という
流れです。そうすると、それぞれ独立して検証できるので。
 そもそも、条件が複数重なると自沈する方ですから。

-- 
_/ -- Last  2251 hours until ATHENS 2004 Olympic Games -----------------
_/ FUJIHARA Keiichi
_/ E-Mail : keiichi@xxxxxxxxxxxxx <or> nagi@xxxxxxxxxxxxxxx
_/ URL    : http://www.keiichi.fujihara.name/
----------------------------------------------+----- Luna Phase 22.65 --
PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178  C348 CD65 7F08 D68F 69F6


スレッド概略
[4774(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]