2016-09-28 7 views
2

Есть ли способ добавить 1 миллисекунду к объекту Time/DateTime в Ruby?Добавить 1 миллисекунду к объекту Time/DateTime

Для запроса веб-сервиса мне нужно время область видимости с миллисекундах:

irb(main):034:0> time_start = Date.today.to_time.utc.iso8601(3) 
=> "2016-09-27T22:00:00.000Z" 

irb(main):035:0> time_end = ((Date.today + 1).to_time).utc.iso8601(3) 
=> "2016-09-28T22:00:00.000Z" 
-- or -- 
irb(main):036:0> time_end = ((Date.today + 1).to_time - 1).utc.iso8601(3) 
=> "2016-09-28T21:59:59.000Z" 

Так что я нахожусь рядом с моей предпочитаемой решения, но time_end должен быть 2016-09-28T21:59:59.999Z.

Я не нашел решений, которые Ruby может обрабатывать с помощью миллисекунд. Я только делал это с strftime, но было бы здорово, если бы была возможность рассчитать.

-- This works, but hard coded -- 
time_end = ((Date.today + 1).to_time - 1).utc.strftime("%Y-%m-%dT%H:%M:%S.999Z") 
=> "2016-09-28T21:59:59.999Z" 

FYI: Я нахожусь на равнине Ruby, нет рельсов.

+2

Возможный дубликат (HTTP [Как получить истекшее время в миллисекундах в Ruby?]: // StackOverflow. com/questions/1414951/how-do-i-get-elapsed-time-in-milliseconds-in-ruby) – ndn

+0

* «Я не нашел решений, которые Ruby может обрабатывать с помощью миллисекунд». * - Вот текущая метка времени, представленная в миллисекундах: 'Time.now.to_f ' –

+1

Мне не нужны текущие миллисекунды, я хочу, чтобы с ним был связан объект времени. Мне нужен 1-дневный объем начала и конца дня. И это в описанном формате iso – Quackerjack

ответ

4

Хорошо, я нашел решение. С реальными расчетами я выгляжу.

time_end = ((Date.today + 1).to_time - 1/1001).utc.iso8601(3) 
=> "2016-09-28T21:59:59.999Z" 

ПРИМЕР

Форматирование в ISO8601 (3) только, чтобы показать поведение.

irb(main):055:0> Date.today.to_time.iso8601(3) 
=> "2016-09-28T00:00:00.000+02:00 

Добавление миллисекунду»

irb(main):058:0> (Date.today.to_time + 1/1000.0).iso8601(3) 
=> "2016-09-28T00:00:00.001+02:00" 

вычитать миллисекунду

!DONT USE, see result with subtracted 2 milliseconds! 
irb(main):060:0> (Date.today.to_time - 1/1000.0).iso8601(3) 
=> "2016-09-27T23:59:59.998+02:00" 

USE 
irb(main):061:0> (Date.today.to_time - 1/1001.0).iso8601(3) 
=> "2016-09-27T23:59:59.999+02:00"