2013-03-04 2 views
14

Ich habe das Datum in Schienen zu vergleichen, um die Werte nach diesem Datum zu erhalten Ich habe das Datum als "2013-03-04T06:26:25Z" senden, aber der Datensatz in der Datenbank enthält Datum wie folgt 2013-03-04 06:26:25.817149 so wenn ich mit dem Datum überprüfen, gibt es auch diesen Datensatz aber ich möchte Datensätze nach diesem Datum. Wie kann ich die Millisekunden von der DB entfernen? Bitte hilf mir.Wie kann ich die Millisekunden von der Datumszeit in Schienen entfernen?

+0

verwenden, die DB Sie verwenden? – AnkitG

+0

Ich benutze Postgres .... – logesh

+0

Oder wenn Sie wissen, dass die Zeit, die Sie verwenden, um zu suchen mit nie Millisekunde Genauigkeit, nur verbessern Sie Ihre Abfrage und Abfrage für Datensätze '> = Zeit + 1. Sekunde. –

Antwort

24

Ich hatte ein ähnliches Problem

Aktualisieren Sie Ihre Zeit Objekt wie folgt, bevor es an die Datenbank zu senden:

time.change(:usec => 0) 
+0

Können wir nicht angeben, welches Format gespeichert werden soll? – logesh

+0

Das zu speichernde Format ist in Ihrer Datenbank definiert, es kann DATE, DATETIME usw. sein. Ihr ORM konvertiert das Datum in das richtige Format für Sie. Ich kenne Postgres nicht, vielleicht können Sie den Typ auf einen weniger genauen Typ ändern. – Intrepidd

+0

Nein, ich möchte irgendwo in der Konfiguration etwas wie strftime (% H% M% S) einstellen, damit das Datum im angegebenen Format gespeichert wird. – logesh

1

Ich war auch mit diesem Problem, aber wenn ich die Änderung der Anwendung wurde as indicated in @Intrepidd's answer es, beeinflusste die Mikrosekunden meines Zeitobjekts nicht.

Bitte beachten Sie, dass (zumindest derzeit) die :usec Taste funktioniert nur mit dem Time#change Verfahren und nicht mit der DateTime#change Methode. Die Methode ignoriert die Schlüssel, die sie nicht akzeptiert, sodass Sie nicht erkennen können, dass die versuchte Änderung der Mikrosekunden nicht funktioniert, wenn Sie das Objekt nicht weiter untersucht haben (z. B. mit DateTime#rfc3339(9)).

Bevor Sie diese Änderung versuchen, stellen Sie sicher, dass Sie mit einem Objekt Time arbeiten, kein Objekt DateTime.

4

Seit 1.9 Rubin können Sie round

t = Time.now.round 
t.useC# => 0 
Verwandte Themen