人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

今、はてなに質問を登録して(「二階から目薬」のネタ)すぐに「質問一覧」画面を見たら、経過時間が「59:54」と表示されていました。
これはどんなロジックでこの数字になるのでしょうか。推理推測含みでOKです。

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

●質問者: pena3
●カテゴリ:はてなの使い方 コンピュータ
✍キーワード:00 はてな ネタ ロジック 推理
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● くまっぷす
●10ポイント

http://www.hatena.ne.jp/awindow

URLはダミーです。

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

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

◎質問者からの返答

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

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

00:03

59:59

00:14

の順で表示されました。

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


2 ● borin
●10ポイント

http://www.goo.ne.jp/

goo

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

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

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

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

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

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

◎質問者からの返答

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

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

状況:

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

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

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

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

ということです。


3 ● xnissy
●10ポイント

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

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

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

http://d.hatena.ne.jp/loger6/20050827#1125154691

loger6の日記

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


開始すぐは

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で時計を同期させるものですので、サーバ間で何秒もずれたりはしないはずなんですし・・・(はてなだからわかりません)

◎質問者からの返答

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

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

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

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


4 ● makeworld
●40ポイント

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 でした。

◎質問者からの返答

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

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

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

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

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

なので、たとえば、

t = t2 - t1;

の後ろに

if (t < 0 ) t=0;

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

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

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

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


5 ● きゃづみぃ
●10ポイント

http://www.hatena.ne.jp/awindow?

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

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

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


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


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

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


そこから推測するには

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

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

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

◎質問者からの返答

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

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

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

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

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

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


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ