2017-03-07 9 views
0

私はRubyでLinuxのRTCを扱おうとしています。 ioctl経由のRTCドライバはstandard time.h fileにあるstruct tmと非常によく似ています。悲しいかな、私はこの構造を理解する標準的なRubyメソッドを見つけることができません(月の数字は0ベース、年は1900ベース)。いくつかの簡単なコーディングの短所は、tm構造体/配列をTimeオブジェクトに変換できるRubyの標準ライブラリ/オブジェクトですか?Ruby:UNIXの構造体をどのように変換するのですか?

現在のソリューションは、次のとおりです。

rtctm_raw=rtc.unpack("iiiiii") # see rtc(4) or time.h 
rtctm=[ *rtctm_raw, 0,0,0,0 ] 
rtctm[4]+=1 
rtctm[5]+=1900 
rtc_values=Time.gm(*rtctm) 

しかし、一つは、Rubyの「GM」と「mktime関数」の呼び出しはPOSIXの対応をミラー思うので、私は、この醜い考えます。しかし、彼らはしません。そのような呼び出しが利用可能な場合は、それらを使用することをお勧めします。

+1

をあなたが何かをしようとしましたか?簡単なコーディングで何が問題になっていますか? –

+1

あなたは変換したいものの例を挙げることができますか...それは文字列ですか? – Kris

+0

@Kris done。更新を参照してください。 – Otheus

答えて

1

オフセットがある場合、単にTimeインスタンスを作成する前にそれを適用します。

tm_struct = { 
    tm_year: 117, 
    tm_mon: 2, 
    tm_mday: 7, 
    tm_hour: 14, 
    tm_min: 32, 
    tm_sec: 30 
} 

puts Time.local(
    tm_struct[:tm_year] + 1900, 
    tm_struct[:tm_mon] + 1, 
    *tm_struct.values_at(:tm_mday, :tm_hour, :tm_min, :tm_sec) 
) 
#=> 2017-03-07 14:32:30 +0100 
関連する問題