ActionWebServiceで:timeを指定してるのにクライアント側がDateTimeで受け取ってしまう
:timeはTimeで受け渡すという意味ではないのかな?
:time
Represents a timestamp, will be cast to a Time object
うーん。。。なんでうまくいかないんだろう。
Javaの話だけど、Roundtrip入門
Javaコードのjava.util.Dateは、XMLスキーマのxsd:datetimeにマッピングします。しかし、xsd:datetimeはJavaコードにjava.util.Calendarとしてマッピングされ返されます。
というのは関係ありそう。java.util.Date → xsd:datetime → java.util.Calendar。
Rubyの場合、Time → xsd:dateTime → DateTime という動作をしている。
受け取った側でキャストする方法も調べてみる。DateTimeからTimeへの変換は、最新版だとDateTime#to_timeが使えるらしい。
Time オブジェクトにしたいんだけど?
最新版では、aDate.to_time とすることができます。 Date、DateTime、Time のそれぞれに、to_date、to_datetime、to_time が定義されています。
でも手元の環境だと未対応だった。残念。
エポックタイムで変換するのを試してみる。
time(3) に相当する値を得るには?
裏技的ですが、aDate.strftime('%s').to_i とするのが簡単です。
こっちはできそう。
irb(main):001:0> require 'date' => true irb(main):002:0> Time.at(DateTime.now.strftime('%s')) TypeError: can't convert String into time from (irb):2:in `at' from (irb):2 irb(main):003:0> Time.at(DateTime.now.strftime('%s').to_i) => Thu Dec 21 02:21:00 +0900 2006
できた!
(追記) Time/DateをDateTimeにする方法もメモ。
- DateTime.parse(Time.now.to_s)
- 新しいバージョンならto_*を使う。