Ruby:如何从UNIX struct tm转换?

Ruby:如何从UNIX struct tm转换?,ruby,unix,time,Ruby,Unix,Time,我试图在Ruby中使用Linux的RTC。RTC驱动程序通过ioctl返回与struct tm非常相似的soemthing,如中所示。唉,我找不到一个标准的Ruby方法来理解这个结构,月数是0,年是1900。除了一些简单的编码,Ruby中是否有一个标准库/对象可以将tm结构/数组转换为时间对象 目前的解决办法是: rtctm_raw=rtc.unpack("iiiiii") # see rtc(4) or time.h rtctm=[ *rtctm_raw, 0,0,0,0 ] rtctm[

我试图在Ruby中使用Linux的RTC。RTC驱动程序通过ioctl返回与struct tm非常相似的soemthing,如中所示。唉,我找不到一个标准的Ruby方法来理解这个结构,月数是0,年是1900。除了一些简单的编码,Ruby中是否有一个标准库/对象可以将tm结构/数组转换为时间对象

目前的解决办法是:

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)

但是我认为这很丑陋,因为有人会认为露比的GM和MKTIME称为POSIX同行。但他们没有。如果有这样的调用,我更愿意使用它们。

如果有偏移量,只需在创建时间实例之前应用它即可:

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

你试过什么吗?一些琐碎的编码有什么问题吗?你能举个例子说明你想转换什么吗。。。“这是一根绳子吗?”克里斯说。请参阅更新。@EricDuminil。现在还不清楚为什么Ruby方式故意偏离POSIX/IEEE方式,同时保持相同的函数名。也许我应该使用其他模块或切换模式。