Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中将数字转换为日期_Ruby_Date_Datetime_Time - Fatal编程技术网

在Ruby中将数字转换为日期

在Ruby中将数字转换为日期,ruby,date,datetime,time,Ruby,Date,Datetime,Time,我从后端获取一个表示日期的数字,并尝试通过以下方式将其转换为日期: number = item["created"].to_i number #=> 1512387277084 DateTime.strptime(number.to_s ,'%s') #=> 49895-08-24T08:58:04+00:00 Time.at(number).utc #=> 49895-08-24 08:58:04 UTC Time.at(number) #=> 49895-08-24

我从后端获取一个表示日期的数字,并尝试通过以下方式将其转换为日期:

number = item["created"].to_i
number #=> 1512387277084
DateTime.strptime(number.to_s ,'%s') #=> 49895-08-24T08:58:04+00:00
Time.at(number).utc #=> 49895-08-24 08:58:04 UTC
Time.at(number) #=> 49895-08-24 11:58:04 +0300
但这是一个错误的结果

如果我使用Epoch&Unix时间戳转换工具,我会得到以下结果:

1512387277084
Assuming that this timestamp is in milliseconds:
GMT: Monday, December 4, 2017 11:34:37.084 AM
Your time zone: Monday, December 4, 2017 2:34:37.084 PM GMT+03:00
Time.at(number)
不起作用

如何正确转换它?

DateTime.strtime('1512387277084','%Q'))
DateTime.strptime('1512387277084', '%Q')
#⇒ #<DateTime: 2017-12-04T11:34:37+00:00
#       ((2458092j,41677s,84000000n),+0s,2299161j)>
#⇒ #
.

DateTime.strtime('1512387277084','%Q')
#⇒ #
.

根据将
Time
类的
at
方法作为自变量“自历元起的秒数”,而不是自历元起的“毫秒数”。 另一种变体以“秒”作为自变量,以“秒”作为自变量,以“微秒”作为自变量

您需要将
number
(输入)从
ms
转换为
sec
us
,以获得预期/正确的结果

示例

错误(毫秒表示为秒):

具有分形的秒数:

> number2 = number / 1000.0
=> 1512387277.084
> Time.at(number2)
=> 2017-12-04 12:34:37 +0100
> Time.at(number2).usec
=> 84000
> Time.at(number2).nsec
=> 84000110 # Wrong of by 110 ns 

> Time.at(number2.round(3)).nsec
=> 84000110 # Wrong of by 110 ns
> Time.at(number2.round(2)).usec
=> 79999 # Wrong
> Time.at(number2.round(2)).nsec
=> 79999923 # Wrong
仅秒数:

> number3 = number / 1000
=> 1512387277
> Time.at(number3)
=> 2017-12-04 12:34:37 +0100
> Time.at(number3).usec
=> 0 # Wrong
> Time.at(number3).nsec
=> 0 # Wrong
秒和微秒:

ms = number % 1000 # Milliseconds
=> 84
> us = ms * 1000 # Microseconds
=> 84000
> Time.at(number3, us)
=> 2017-12-04 12:34:37 +0100
> Time.at(number3, us).usec
=> 84000 # OK
> Time.at(number3, us).nsec
=> 84000000 # OK
> Time.at(number3, us).to_f
=> 1512387277.084 # OK
更新2

秒是理性的

> number4 = number.quo(1000)
=> (378096819271/250)
> Time.at(number4)
=> 2017-12-04 12:34:37 +0100
> Time.at(number4).usec
=> 84000 # OK
> Time.at(number4).nsec
=> 84000000 # OK
> Time.at(number4).to_f
=> 1512387277.084 # OK
根据,将
Time
类的
at
方法作为自历元以来的“秒数”参数,而不是自历元以来的“毫秒数”。 另一种变体以“秒”作为自变量,以“秒”作为自变量,以“微秒”作为自变量

您需要将
number
(输入)从
ms
转换为
sec
us
,以获得预期/正确的结果

示例

错误(毫秒表示为秒):

具有分形的秒数:

> number2 = number / 1000.0
=> 1512387277.084
> Time.at(number2)
=> 2017-12-04 12:34:37 +0100
> Time.at(number2).usec
=> 84000
> Time.at(number2).nsec
=> 84000110 # Wrong of by 110 ns 

> Time.at(number2.round(3)).nsec
=> 84000110 # Wrong of by 110 ns
> Time.at(number2.round(2)).usec
=> 79999 # Wrong
> Time.at(number2.round(2)).nsec
=> 79999923 # Wrong
仅秒数:

> number3 = number / 1000
=> 1512387277
> Time.at(number3)
=> 2017-12-04 12:34:37 +0100
> Time.at(number3).usec
=> 0 # Wrong
> Time.at(number3).nsec
=> 0 # Wrong
秒和微秒:

ms = number % 1000 # Milliseconds
=> 84
> us = ms * 1000 # Microseconds
=> 84000
> Time.at(number3, us)
=> 2017-12-04 12:34:37 +0100
> Time.at(number3, us).usec
=> 84000 # OK
> Time.at(number3, us).nsec
=> 84000000 # OK
> Time.at(number3, us).to_f
=> 1512387277.084 # OK
更新2

秒是理性的

> number4 = number.quo(1000)
=> (378096819271/250)
> Time.at(number4)
=> 2017-12-04 12:34:37 +0100
> Time.at(number4).usec
=> 84000 # OK
> Time.at(number4).nsec
=> 84000000 # OK
> Time.at(number4).to_f
=> 1512387277.084 # OK

您必须将
数字
除以1000才能使用
时间。at
,但使用浮点除法不会给出正确的结果:
时间。at(number2)。nsec
返回
84000110
。正确的结果应该是
84000000
–您的结果是110纳秒。@Stefan更新了我的答案,以考虑您的输入。Thx不必那么复杂:
Time.at(number.quo(1000))
你必须将
number
除以1000才能使用
Time.at
,但使用浮点除法不会给出正确的结果:
Time.at(number2)。nsec
返回
84000110
。正确的结果应该是
84000000
–您的结果是110纳秒。@Stefan更新了我的答案,以考虑您的输入。Thx不必那么复杂:
Time.at(number.quo(1000))