2009-08-31

http://anond.hatelabo.jp/20090831002727

ファンタジックな処理だと思うけど、コード自動生成ツールで作ったんかなあ。

pythonだとこんな感じになると思ふ

もっとエレガントにかけるやもしれんが

import calendar

DAYS_sec = 60*60*24
YEAR_sec = DAYS_sec * 365
MONTH_day = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

year, month, day = 2009, 6, 4

ans = year * YEAR_sec + calendar.leapdays(0, year)*DAYS_sec
ans = ans + sum(MONTH_day[:month]) * DAYS_sec
if calendar.isleap(year) and (month > 2):
  ans = ans + DAYS_sec
ans = ans + day * DAYS_sec
print day, month, year, '23:59:59 is', ans-1, 'sec'

でも実は日本でグレゴリオ歴が採用されたのって1872年からだからほんとは駄目だけどね〜

----

いろいろバグってたー。検算大事ね。

  • 閏年は考慮されてるようにみえないけど?

    • 閏年が考慮されてるように見えないのなら、ちゃんとソース読むところからはじめないと駄目だと思うが。 なぜcalendarをインポートしてるかって言うと、以下の一文入れるから。 ans = yea...

  • 西暦0年とかX月0日とか存在しないよ。 yearとdayは掛け算の前に-1すべきだと思う。

  • 標準モジュールの使用ありなら、なんでdatetime使わないんだ? #!/usr/bin/python# coding: utf-8import datetimedt1 = datetime.datetime(2009, 9, 1, 2, 34, 56) # 2009年9

    • datatimeって2.0系列で閏年の扱いが曖昧だからじゃね。 leapdays()のバグ(こっちは2.0だと直ってる)と同じく、timedeltaのdaysって400で割り切れる年を平年と見なす(本来は閏年)バグが入って...

      • Python 2.5.2 (r252:60911, Sep 30 2008, 15:41:38) [GCC 4.3.2 20080917 (Red Hat 4.3.2-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information.import datetimedays = lambda year: (datetim...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん