如何将整数转换为无符号的64位整数

时间:2015-08-17 08:21:34

标签: c# ruby

我正在将此代码从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();

Ruby代码

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位整数。打包真的是要走的路吗?

2 个答案:

答案 0 :(得分:2)

我不确定你的代码的返回值是多少,但它确定不是纪元以来的秒数。

Ruby将日期和时间内部存储为秒,直到纪元。 Time.now.to_i将完全返回您要查找的内容。

require 'date'

# Seconds from epoch to this very second
puts Time.now.to_i

# Seconds from epoch until today, 00:00
puts Date.today.to_time.to_i

答案 1 :(得分:0)

简而言之,Time.now.to_i就足够了。

Ruby自Time以来在几秒钟内内存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,任意大小。