Ruby-新的\u偏移丢失一秒
我不确定这种行为是否有意,但我觉得有点奇怪。我正在使用来自的代码 对于某些时间,返回的日期时间早一秒:Ruby-新的\u偏移丢失一秒,ruby,datetime,datetimeoffset,Ruby,Datetime,Datetimeoffset,我不确定这种行为是否有意,但我觉得有点奇怪。我正在使用来自的代码 对于某些时间,返回的日期时间早一秒: (DateTime.parse("2012-07-15 16:56:00") - (estHoursOffset/24.0)).new_offset(estOffset) => #<DateTime: 2012-07-15T16:55:59+10:00 (2456123.788888889,5/12,2299161)> (DateTime.parse(“2012-07-
(DateTime.parse("2012-07-15 16:56:00") - (estHoursOffset/24.0)).new_offset(estOffset)
=> #<DateTime: 2012-07-15T16:55:59+10:00 (2456123.788888889,5/12,2299161)>
(DateTime.parse(“2012-07-15 16:56:00”)-(estHoursOffset/24.0))。新的偏移量(EstoOffset)
=> #
但在其他情况下,这似乎是正确的:
(DateTime.parse("2012-07-15 16:16:00") - (estHoursOffset/24.0)).new_offset(estOffset)
=> #<DateTime: 2012-07-15T16:16:00+10:00 (2456123.7611111114,5/12,2299161)>
(DateTime.parse(“2012-07-15 16:16:00”)-(estHoursOffset/24.0))。新的偏移量(EstoOffset)
=> #
我正在编写的程序只关心分钟数,这意味着我将在需要时返回16:55
所以我的问题是,
- 这是故意的吗?(如果是这样的话,有没有记录在案——我什么都没找到。)
- 有没有一种简单的方法可以通过编程解决这个问题?由于我不关心秒数,我想我可以“汇总”返回的日期时间,但最好知道这是否会在边缘情况下带来任何其他问题
require 'date'
$date = Time.now #current date/time
puts $date
puts $date.min #if you want to use only the minutes
$date="2012-07-15 16:56:00" #if you want to parse it yourself
继续回答您的问题:
-不,这不是国际性的,也可能是间歇性的。我已经在上面(+10小时澳大利亚)测试了您的代码&在我的位置英国伦敦(+1小时)。总是得到时间解析;一秒钟也不能少,一秒钟也不能多
现在,如果您需要将秒数取整,那么您将100%确保每次&每次都获得相同的结果..:
def round_up(seconds)
divisor = 10**Math.log10(seconds).floor
i = seconds / divisor
remainder = seconds % divisor
if remainder == 0
i * divisor
else
(i + 1) * divisor
end
end
我不明白为什么取整会导致边界条件出现问题;只要你总是把每件事都搞定!希望这有帮助!祝你好运,伙计:)这可能是因为浮点数不精确-你正在减去的
10/24.0
无法精确表示
如果你没有减去浮点数,而是减去了一个有理数,即
rational(esthourscoffset,24)
,那么你应该没事了谢谢你的帮助。我应该指出,日期/时间是从数据库中读取的,因此我不能使用time.now
。我会看看我是否能更一致地复制这个bug,否则我可能不得不进行舍入。你在使用什么操作系统?我只是在工作的时候在我的电脑上试过这个,我没有发现原来的错误。只发生在我的Mac电脑上。
def round_up(seconds)
divisor = 10**Math.log10(seconds).floor
i = seconds / divisor
remainder = seconds % divisor
if remainder == 0
i * divisor
else
(i + 1) * divisor
end
end