PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Millisekundenauflösung von DateTime in Ruby

ActiveRecord sollte die volle Genauigkeit aus der Datenbank erhalten, Sie sehen es sich einfach nicht richtig an. Verwenden Sie strftime und der %N Format, um die Sekundenbruchteile anzuzeigen. Beispiel:psql sagt dies:

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

und ActiveRecord sagt Folgendes:

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

Es ist also alles da, man muss nur wissen, wie man es sieht.

Beachten Sie auch, dass ActiveRecord Ihnen wahrscheinlich ActiveSupport::TimeWithZone geben wird Objekte statt DateTime Objekte, aber DateTime bewahrt auch 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" 

Schauen Sie sich connection_adapters/column.rb an in der ActiveRecord-Quelle und überprüfen Sie, was die string_to_time Methode tut. Ihre Zeichenfolge würde fallback_string_to_time nach unten gehen Pfad und das bewahrt Bruchteile von Sekunden, soweit ich das beurteilen kann. An anderer Stelle könnte etwas Seltsames vor sich gehen, ich wäre nicht überrascht angesichts der seltsamen Dinge, die ich in der Rails-Quelle gesehen habe, insbesondere auf der Seite der Datenbank. Ich würde versuchen, die Strings von Hand in Objekte umzuwandeln, damit ActiveRecord die Finger davon lässt.