From: Masaki Suketa Date: 1999-11-27T13:07:32+09:00 Subject: [ruby-list:18974] Re: ADO にて datetime 型の取得 助田です. In message "[ruby-list:18877] Re: ADO にて datetime 型の取得" on 99/11/24, Tadayoshi Funaba writes: > MS な環境一般でよくつかわれているのではないかと想像するのですが、どう > なんでしょう (そもそも COM というのものが、僕はよくわからないのですが)。 OLE というか COM というかその日付型(VT_DATE)は、内部では 浮動小数点数です。整数部が 1899/12/30 からの経過日数. マイナスの場合は、1899/12/30より前の日付を示します. 小数部は、1日を1.0 としたときの割合です. > # よく記事を追ってなかったのですが、時刻の書式を考えるのでしたら、ISO > # 8601 形式を検討することをおすすめしたいです。単に、Time にできないの > # で文字列ということならば、整数 (ひょっとして浮動小数点数?) にしてお > # くとか (そのまま、あるいは Time.at に与えられるように調整してエポッ > # ク以前を負にするなど)、あるいは要素を Array にすることもできそうです > # が...。 書式はあまり考えてないです. OLEサーバー側とスムーズにやりとりできて,Ruby 側で 加工しやすい方法を考えてました. Array とか そのまま浮動小数点数を返すとかも考えたのですが, たとえば,Excel のセルに入っている時刻を取り出してまた セットすることを考えた場合,"YYYY/MM/DD hh:mm:ss" の フォーマットの文字列の方が都合が良さそうなんですね. セル A1 に時刻が入っているときに t = Range("A1").value Range("B1").value = t とした場合,t に入るのが "YYYY/MM/DD hh:mm:ss" の文字列の場合 Excel側で勝手に解釈して B1は日付型に変換された値が入ります. 多分,ACCESS なんかも同じなんじゃないかと思います. # 「勝手に解釈」するせいで痛い目を見ることもあるんですけど. ということで "YYYY/MM/DD hh:mm:ss" の文字列にします. Time オブジェクトにしたければ Time.mktime(*t.split(/[\/ :]/)) としてください. # それから,断っておきますが 1965/1/25 は # 私の誕生日ではありません.:-P 例外になるのは同じなんだけど,こだわっているらしい. 助田 雅紀