トップ «前の日記(2004-12-19 (Sun)) 最新 次の日記(2004-12-22 (Wed))» 編集

HAL99の徒然日記

2004年
12月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
2000|11|12|
2001|01|02|03|04|05|06|07|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|

HAL99の個人的な日記+メモです。内容に関する保証はできませんので、読み物としてお楽しみください。
私と利害関係のある方が日記の内容とリアル世界を混同しても関与しません。

  1. Inte (12/28 16:22)
  2. HAL99 (01/02 13:47)
  3. 星河 (01/02 13:41)


2004-12-21 (Tue) 天気[晴れ ] [長年日記]

[Ruby] 2037年問題

 掲示板のプログラムで記事を非表示にする際に、公開期間を"9999/12/31 23:59:59"から開始と設定していたのですが、この記事を単独で再度検索しようとすると落ちるという現象にぶつかりました。

 PostgreSQLで運用しているものだったので、何が制限があるのかとおもったのですが、コンソールからSQL文を投げると正常に取れます。どうもRuby/DBIがTimeStamp型の変換に失敗しているようです。

 そこで怪しそうな、dbi/sql.rbを調べてみると、ありました。以下の部分です。

def as_timestamp(str)
  return nil if str.nil? or str.empty?
  ary = ParseDate.parsedate(str)
  time = ::Time.gm(*(ary[0,6]))
  if ary[6] =~ /^((\+|\-)\d+)(:\d+)?$/
    diff = $1.to_i * 3600  # seconds per hour
    time -= diff
    time.localtime
  end
  DBI::Timestamp.new(time)
end

 ここのメソッドの変換に失敗して落ちています。正確には「time = ::Time.gm(*(ary[0,6]))」の部分です。2037年問題にこんなところで引っかかるとはおもっていませんでした。Ruby1.6.8のTime.gmは2037年以後の年月の変換ができません。

 データベースには正常に入っているとしても、Ruby/DBI経由で時間データを取得する場合、DBI::Timestamp型に一端変換されてでてきますから、上記メソッドを必ず経由します。この時に、2037年問題にひっかかって落ちる訳です(泣)。

 とりあえず、手元のプログラムは9999年にするのを2037年にしましたが、これはこれで困った物です。

日記とは

 時折混乱している方がいらっしゃるので、しばしば書く事ですが、また書くことにします。

 このページは日記風になっていますが、The Game Galleryのコンテンツの一種です。書いてる内容は、真実に近い事が多いですが、必ずしも全て真実ではありませんのであくまで読み物としてお楽しみ下さい。

 登場人物にしても、話しの流れの都合によっては、本来「いなかった人物がいること」になったり、「いた人がいなかったことになったり」してます(私のプライベートを保護するためももちろんあります)。書いてる内容の時間軸も私の都合に合わせて、順番が入れ替わったり、場合によって数日入れ替わったりすることは常に発生しています(私の知人・友人を始め様々な私と利害関係のある人がこのコンテンツを見ている前提で書いています)。ですから、このコンテンツと私の私生活をシンクロさせて考えることは意味がありません。

 今日書いていますような、RubyやLinuxに関することは、技術的な個人メモですので、意図的な嘘は紛れ込んでいませんが、私個人の調べうる範囲の情報を便利なように記載しているだけですので、必ずしも正しいかどうかはわかりません。と言いましても、今日の上の記事の2037年問題ですら「公開期間が云々」という事から書き始めていますが、いきなりそんな事から実際わかるわけがありません。もっといろいろな所を調べた結果わかったのですがそこは私自身には意味が無いのでカットして結果だけをメモ的に書いてるにすぎません。この時点で現実の私が対応した内容とは技術的な内容であっても、一致しません(公開するとツッコミが来て面倒だな等と思ったことは個人用の記録に掲載して、こんなパブリックな場所には掲載しません)。

 おわかりの方は、おわかりと思いますが、お断りまで。

本日のツッコミ(全4件) [ツッコミを入れる]
# YOK (2004-12-23 (Thu) 02:45)

お、Vシリーズに着手されたようですね?

# HAL99 (2004-12-23 (Thu) 11:13)

いえ、残念ながらまだ着手できていません。年末には読みたいと思っているのですけれど

# YOK (2004-12-23 (Thu) 20:57)

なんとなくVシリーズの序文を連想してしまいました>上の文

# HAL99 (2004-12-23 (Thu) 21:14)

そうなのですか>上の文<br>S&Mシリーズ読破後の影響をひきづっているのかもしれませんね。


 Written By HAL99