時間に関するプログラマの誤解

過去数年にわたって、私は他の人のテストのデバッグに多くの時間を費やしました。 面白い作品で、時にはイライラすることもありましたが、常に有益でした。 誰かがテストにバグがないと考えるかもしれませんが、もちろんどこにもバグがあり、テストも例外ではありません。



私は、コードテストでのエラーの数と、 時間に関する誤解と誤解から生じるアプリケーションに常に驚かされまし 。 これは、処理時間のコンピューターによる方法と、不完全なカレンダー構造から生じる基本的なエラーの両方を意味します。夏季はここでは氷山の一角にすぎません。



実際、他の人の(そして自分の)プログラムにマークを残す誤解が非常に多いので、最も一般的な問題のリストを作成すると便利です。



これらの仮定はすべて誤りです。

1. 1日は常に24時間です。

2.月には常に30日または31日があります。

3. 365日の年。

4. 2月には、常に28日があります。

5. 24時間は、同じ日(週、月)に開始および終了します。

6.週は常に同じ月の始まりと終わりです。

7.週(月)は常に同じ年に始まり、同じ年に終わります。

8.プログラムが実行されるマシンは常にGMT時間帯になります。

9.さて、これは真実ではありません。 ただし、少なくともタイムゾーンは変更されません。

10.確かに、プログラムが商用運用されている場合、タイムゾーンは変更されません。

11.システムクロックは常に正確な現地時間に設定されます。

12.システムクロックは、常に正確な現地時間とそれほど変わらない時間に設定されます。

13.システムクロックがうまくいかない場合、少なくとも同じ秒数だけ常に異なります。

14.サーバーとクライアントの時計は常に同じ時刻を示します。

15.サーバーとクライアントの時計は常にほぼ同じ時刻を示します。

16.さて、しかし、サーバー上の時間とクライアント上の時間は何十年も変わらないでしょう。

17.サーバーとクライアントのクロックが同期していない場合、一定の秒数の間、少なくとも常に同期していない。

18.サーバーとクライアントの時計は同じタイムゾーンになります。

19.システムクロックは、遠い過去または遠い未来に属する時間を表示しません。

20.時間には始まりも終わりもない。

21.システムクロックの1分は、他のクロックの 1分とまったく同じ時間です。

22.わかりましたが、システムクロックの1分間は、他のほとんどの時間の1分間に近くなります。

23.良いですが、システムクロックの1分間は1時間を超えることはありません。

24.はい、あなたは冗談を言っています。

25.最小時間単位は1秒です。

26.さて、1ミリ秒。

27.システムクロックを正確な現地時間以外の値に再配置する必要はありません。

28.さて、 テストのために、システムクロックを別の値に再配置する必要があるかもしれませんが、 商業運用では決して必要ではありません

29.タイムスタンプは、常に1339972628や133997262837のようなわかりやすい形式になります。

30.タイムスタンプは常に同じ形式になります。

31.タイムスタンプの精度は常に同じです。

32.十分な精度のタイムスタンプは一意と見なすことができます。

33.タイムスタンプは、イベントが実際に発生した時間を示します。

34.人間が読める日付は、05/07/11のような普遍的で理解可能な形式で送信できます。



そのジョークは、1時間より長く続く約1分間のジョークでしたか?

いや



CentOS上の古いバージョンのKVMには魅力的なバグがありました。 KVM仮想マシンは、物理ハードウェアで何が実行されているのかわかりませんでした。 したがって、親OSが仮想マシンをスリープモードにした場合、スリープ解除後、仮想マシンのシステムクロックはスリープ状態になったときと同じ時間でした。 たとえば、VMが13:00にスリープ状態になり、2時間後(15:00)にアクティブ状態に戻った場合、VMシステムクロックには13:00の現地時間が引き続き表示されます。



常に時刻を同期するデーモンを実行できますが、新しい仮想マシンではこれがしばしば忘れられ、非常に面白い状況になりました。 このバグは次のバージョンで修正されました。



PSこの出版物は、Patrick Mackenzieによるユーザー名についてのカルト投稿に触発されました。 この傑作を読んでいない場合は、今すぐ読んでください。 私はあなたがそれを好きになると約束します。



All Articles