我正在将这段代码从c转换为ruby:
C语言代码
DateTime dtEpoch = new DateTime(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc);
string strTimeStamp = Convert.ToUInt64((DateTime.UtcNow - dtEpoch).TotalSeconds).ToString();
红宝石代码
now = Time.now.utc
epoch = Time.utc(1970,01,01, 0,0,0)
time_diff = ((now - epoch).to_s).unpack('Q').first.to_s
我需要把这个整数转换成一个无符号的64位整数。解包真的是个好办法吗?
最佳答案
简而言之,Time.now.to_i
就足够了。
ruby内部存储Time
s的时间是从1970-01-01T00:00:00.000+0000
开始的秒数:
Time.now.to_f #=> 1439806700.8638804
Time.now.to_i #=> 1439806700
而且您不必将该值转换为c中的类似
ulong
的值,因为ruby会自动强制整数类型,这样它就不会与您的常见感觉抗争。有点冗长的解释:ruby将整数存储为
Fixnum
的实例,如果这个数字符合63位的大小(不是64位,奇怪吧?)如果这个数字超过了这个大小,ruby会自动将它转换成一个Bignum
,它有一个任意的大小。