今、はてなに質問を登録して(「二階から目薬」のネタ)すぐに「質問一覧」画面を見たら、経過時間が「59:54」と表示されていました。

これはどんなロジックでこの数字になるのでしょうか。推理推測含みでOKです。

なお、その後10〜20秒くらいしてから再度一覧画面をロードしてみたら、00:20 と正常に表示されました。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/09/23 01:22:29
  • 終了:--

回答(6件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852005/09/23 01:29:09

ポイント10pt

URLはダミーです。

しばらく前にログインできない、履歴がめちゃくちゃ、質問も遥か昔のが出たり、勝手に再質問に流れたりというトラブルがありました。

はてなのシステムは機能ごとに別のサーバーで動いていて、それらサーバー間の時刻の同期がずれることがあるんだと思います。

id:pena3

なるほど、サーバ間の時刻の微妙なズレがこの表示をさせるのですね。

ちなみにこの質問をする際にももちろん確認してみましたが、結果はリロードするたびに、

00:03

59:59

00:14

の順で表示されました。

マイナス値(と思われる)が59分になるのがおもしろいですね。

2005/09/23 01:42:45
id:borin No.2

borin回答回数2053ベストアンサー獲得回数02005/09/23 01:56:27

ポイント10pt

具体的なことは分かりませんが、サーバだと思います。

深夜になると急に調子悪くなったりすることがたびたびあるんですよ。

この前はポイントがでたらめになってたり、

同じ質問から何回もポイントをもらっていたりと、

かなりのトラブルがありました。

それに似た現象だと思います。

id:pena3

今回の現象については、そういった深夜特有の不具合とは別の現象だと思っています。

Kumappus さんが後半でご教示されたように、サーバ間の時計の微妙な差によるものだとは思いますが、それがこのような時間表示になるロジックを推測してみましょう、ということでよろしくです。

状況:

1:56:10に質問を登録した。(この時刻はサーバAの時刻を登録)

一覧を見るときにはサーバBに接続した

サーバBでは、微妙に時計がずれていて、まだ1:56:05だった。

で経過時刻が 59:55 と表示される(この数字も推測含です)理由というかロジックが気になる

ということです。

2005/09/23 02:03:46
id:xnissy No.3

xnissy回答回数1029ベストアンサー獲得回数2032005/09/23 03:47:07

ポイント10pt

http://i.hatena.ne.jp/idea/5607

はてなアイデア - [仕様?]経過の時間表示が1秒未満だとAB分CD秒の表示部分がおかしい。

はてなアイデアでも報告されています。参考までに。

上記アイデアについて、こちらで例をあげて説明されています。


開始すぐは

59:38

02:02

02:16

02:51

となっていて、しばらくすると(キャプチャ画像)

20:14

22:16

22:30

23:05

になったとのこと。


1つ下の質問との秒数の差に注目すると、

2:02

0:14

0:35

のはずですが(キャプチャ画像の方から計算)、59:38をマイナス22秒と考えると、開始すぐの1番目と2番目の時間差は02:24となってしまいます。59:38はマイナス22秒ではなく、00秒5538と考えることはできませんか?そうすると時間差2:02になり、計算があいます。


今回の例で言うと、

00分00秒0003

00分00秒5959

00分14秒

ということです。1回目と2回目のリロードは0.6秒間隔くらいではありませんでしたか?(うーん、ちょっと無理があるかもしれません。でも計算に矛盾はないですよね。)


pena3さんの推測のように「質問登録時にはサーバAの時刻が記録され、一覧を見るときにはサーバBの現在時刻との差を計算している」と考えると、id:loger6さんの報告の“秒数の差”に注目したときに矛盾が生じます。どのサーバで見ても、秒数の差は(データベースに登録されたものなので)同じになるはずだからです。


それに、ふつうサーバはntpで時計を同期させるものですので、サーバ間で何秒もずれたりはしないはずなんですし・・・(はてなだからわかりません)

id:pena3

すでに報告されている現象だったのですね。

ううん。。少しなるほどと思いつつ、なんでミリ秒が表示されるのか(いや正確にはミリ秒じゃなくて 0.1ミリ秒でうsね^^; )がいまひとつ腑に落ちません。。。

他の方の回答も見てからまた考えてみたいとおもいます。。。

となりの質問との秒数の差に着目するというのは大きなヒントでした。ありがとうございます。

2005/09/23 10:08:04
id:makeworld No.4

makeworld回答回数75ベストアンサー獲得回数232005/09/23 03:56:30

ポイント40pt

http://www.ntp.org/

ntp.org: Home of the Network Time Protocol

URLはダミーです。


おそらく質問の登録時刻(t1)と現在の時刻(t2 = time())の差分が3600以下の時にgmtime()などを使って経過時間を算出してるのではないでしょうか。


time_t t;

struct tm *p;


t = t2 - t1;

if(t < 3600) {

p = gmtime(&t);

printf(”%02d:%02d¥n”, p->tm_min, p->tm_sec);

} else if(t < 86400) {

...

} else {

...

}


glibcのgmtime()は、負数でも正常に処理されるようです。

gmtime(-6) => Wed Dec 31 23:59:54 1969 でした。

id:pena3

わお!待っていました、こういう具体的な回答を。

・経過時間が「1時間以内( <3600 ) の場合にのみ発生する事象

・gmtime() では引数に負数を与えても 1970/01/01 00:00:00 から負方向への日時を算出して返す

・はてなの経過時間ではこの、分、秒、の部分を使用している

・やはり、サーバごとの時刻差によって、経過時間(ここでいう t )が負になっていることがありそう。

なので、たとえば、

 t = t2 - t1;

の後ろに

 if (t < 0 ) t=0;

なんてのをつければOKなのですね。

非常にストンと腑に落ちました!

どうもありがとうございます!

以降、せっかくなので開けさせていただきます。

2005/09/23 10:15:17
id:taknt No.5

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/09/23 06:23:25

ポイント10pt

質問直後は、どれも そのように表示されるようです。

今までに 何度か 見かけましたから。

時間帯も 昼間でもあります。


ロジックの前に 経過時間の表示のさせ方の決まりを 調べる必要がありますね。


一概に 時間を差し引きしたのをそのまま表示しているというわけではないのです。

一時間とか一日とか けっこう時間によって アバウトなまとめかたがされているのです。


そこから推測するには 

59:54は 59時間54分ではなく

0.5954秒後では ないのかという 推測です。

1秒以下を そのように表示していたのではないのかということですが、それだったら納得がいきますね(これが正解だったらね)

id:pena3

1秒以下をわざわざプログラムで場合分けして処理しているとは通常考えにくいことと、

使用している関数のクセによるものなら、なぜそこで 1/1000秒が採用されてしまうのかがまったくわからないという点で、

他の回答にも書かせていただきましたが いまひとつストンと落ちていないのです。

個人的には makeworld さんの回答で非常に納得しているのですが、さて真相ははてなの中の人のみが知る、ということで^^

で、こういうのの報告ルートがわからないのですが、はてなの方が勝手に見つけて直してくれるんでしょうか(^^;)

 いや、直らなくても別に困りはしないのでいいんですけどね、これ。

2005/09/23 10:18:18
id:loger6 No.6

loger6回答回数72ベストアンサー獲得回数52005/09/23 09:00:31

ポイント10pt

私も3回見ました。

はじめて見たときはバグったのかと思ってあせりましたw

上のURLはそのひとつをキャプチャしたものです。

私が見たのは「59:38」「59:54」「59:56」です。

どうも「59」の部分は変わらない?みたいっぽいです。


私の考えは上2桁の「59」がマイナス部分と考えて、残り下2桁の「54」が秒かなと勝手に考えてます。

でも時間的には他の質問との間隔は「00:00」との間隔と等しいので、もしかしたら「59」が(マイナスの)秒で「54」が100分の1秒かもしれません。

登録の処理の後、最後に時間の表示(カウント)の処理を行ってるのかなと考えたり。

だからフライング状態に見える、と考えています。

そういう仕様?になってるのかなと勝手に思ってます。

id:pena3

ありがとうございます。

でも、ふふふ。makeworld さんのお説で私は非常に納得してしまったので、やっぱりミリ秒説には、いまひとつ「うぅぅん、、そうかもしれないし、でもなんか違う気がするなー」という思いを強くしてきました。

みなさん、おつきあいありがとうございました m(_ _)m

2005/09/23 10:20:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません