Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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-新的\u偏移丢失一秒_Ruby_Datetime_Datetimeoffset - Fatal编程技术网

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

所以我的问题是,

  • 这是故意的吗?(如果是这样的话,有没有记录在案——我什么都没找到。)
  • 有没有一种简单的方法可以通过编程解决这个问题?由于我不关心秒数,我想我可以“汇总”返回的日期时间,但最好知道这是否会在边缘情况下带来任何其他问题
我两次都试过(“2012-07-15 16:56:00”和“2012-07-15 16:16:00”),Ruby总是给出最初解析的时间。我不知道伙计,你是怎么做到少1秒的;这是一个奇迹!!只是开玩笑:)

如果这仍然给您带来困难,请尝试获取日期和时间-简单如下..:

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