sql >> Database >  >> RDS >> PostgreSQL

Milliseconde resolutie van DateTime in Ruby

ActiveRecord zou de volledige precisie van de database moeten behouden, je kijkt er gewoon niet goed naar. Gebruik strftime en de %N formaat om de fractionele seconden te zien. Bijvoorbeeld psql zegt dit:

=> select created_at from models where id = 1;
         created_at         
----------------------------
 2012-02-07 07:36:20.949641
(1 row)

en ActiveRecord zegt dit:

> Model.find(1).created_at.strftime('%Y-%m-%d %H:%M:%S.%N')
 => "2012-02-07 07:36:20.949641000" 

Dus alles is er, je moet alleen weten hoe je het kunt zien.

Houd er ook rekening mee dat ActiveRecord u waarschijnlijk ActiveSupport::TimeWithZone . zal geven objecten in plaats van DateTime objecten maar DateTime bewaart ook alles:

> '2012-12-31T01:01:01.232323+3'.to_datetime.strftime('%Y-%m-%d %H:%M:%S.%N')
 => "2012-12-31 01:01:01.232323000" 

Kijk eens op connection_adapters/column.rb in de ActiveRecord-bron en controleer wat de string_to_time methode doet. Je string zou naar beneden gaan in de fallback_string_to_time pad en dat behoudt fractionele seconden zo dicht als ik kan zien. Er zou ergens anders iets vreemds aan de hand kunnen zijn, het zou me niet verbazen gezien de vreemde dingen die ik in de Rails-bron heb gezien, vooral de databasekant. Ik zou proberen de strings met de hand naar objecten te converteren, zodat ActiveRecord er van af blijft.



  1. MS-Access-recordset en klassenmodule

  2. PostgreSQL VACUUMM en ANALYSE Tips voor beste praktijken

  3. ActiveRecord::AdapterNotSpecified databaseconfiguratie specificeert geen adapter

  4. Zoekcriteria verschil tussen Like vs Bevat() in oracle