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

本文关键字:整数 无符号 64位 转换 | 更新日期: 2023-09-27 18:08:19

我正在将此代码从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位整数。拆包裹真的是该走的路吗?

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

我真的不确定代码的返回值是多少,但它肯定不是从epoch开始的几秒钟。

Ruby在内部存储日期和时间,直到epoch。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

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

Ruby从1970-01-01T00:00:00.000+0000:开始在内部存储Time秒(秒(

Time.now.to_f  #=> 1439806700.8638804
Time.now.to_i  #=> 1439806700

您不必将值转换为C#中的ulong,因为Ruby会自动强制整数类型,这样它就不会与您的常识相冲突。

一个有点冗长的解释:ruby将整数存储为Fixnum的实例,如果该数字符合63位的大小(不是64位,奇怪吗?(如果该数字超过该大小,ruby会自动将其转换为具有任意大小的Bignum