Ruby DateTime and MySQL datetime

I am lost…

using
sel_start_date = DateTime.new(sd.year,sd.month,sd.day,16,0,0)
if I display it I have sel_start_date.to_s => “2006-10-19T16:00:00Z”

but I cannot performed correct searches into my MySQL DB (4.1.23) on
datetime columns

It seems that I need to use strings like “2006-10-19 16:00:00” in the
WHERE clause…
( I tried using manual queries with this format and it runs…)

what is the best startegy to use datetime correctly between Ruby and
MySQL ?

thanks

Kad

Use MySQL date functions DATE_FORMAT or FROM_UNIXTIME

SELECT DATE_FORMAT(‘1997-10-04 22:23:00’, ‘%D %y %a %d %m %b %j’);

Josselin wrote:

what is the best startegy to use datetime correctly between Ruby and
MySQL ?

Personally, I’d use timestamps to store the information unless it’s
necessary to preserve the timezone information.

Mind you, I think there’s a gotcha lurking in the MySQL timestamp not
being the UNIX timestamp per default or something like that.

David V.

David V. wrote:

Personally, I’d use timestamps to store the information unless it’s
necessary to preserve the timezone information.

Mind you, I think there’s a gotcha lurking in the MySQL timestamp not
being the UNIX timestamp per default or something like that.

David V.

Yes, I used MySQL timestamp, which is better since it initialize itself
if you don’t.

To Josselin
You can use a format string such as the following to format your
datetime

TimeFmtStr="%Y-%m-%d %H:%M:%S"
yourdatetimefield.strftime(TimeFmtStr)

to format it.

On 2006-10-16 05:04:34 +0200, David V. [email protected] said:

textual notation on accounts of being as standard as they get.

David V.

This message has one or more attachments. Select “Save Attachments”
from the File menu to save.

Thanks to all of you… Using Rails, in the meantime I found a way to
format the date before any DB query. But I understand the timezone
problem if it’s necessary to use it (ex : blog -> posts).
In my particular case create/update methods will always set the time
(not the server…) but I keep in mind that if it’s necessary to rely
on server time settings then using UNIX timestamp would be the
solution…
just for my books , why this difference in datetime format with MySQL ?
(I mean the T and Z delimiters… not beeing supported by MySQL… ?
who has precedence ?

ActiveSupport::CoreExtensions::date::Conversions::DATE_FORMATS
Rails uses the :db formatter when converting a date to a string to use
in a database query. So you you can change the :db format and the way
dates are formatted for the database will change automatically

(Time.now…Time.utc(2006, 12, 24, 09, 00)).to_s(:db)
#=>‘BETWEEN 2005-01-24 15:29:24’ AND ‘2006-12-24 09:00:00’"

Joss

Roseanne Z. wrote:

Yes, I used MySQL timestamp, which is better since it initialize itself
if you don’t.

Which is an idiosyncracy of MySQL I resent, but that’s sidetracking.
Also, it’s only convenient to store server-side times, and because of
the automagical behaviour, at best record creation / update times.

(Hands up who remembers to set the MySQL connection timezone depending
on the HTTP request client locale?)

User-input times will need massaging to convert them from his local
timezone to a canonical representation anyway, often can be optional,
when relying on MySQL specifics will shoot yourself in the foot as it’s
completely impossible for the first timestamp column to contain a SQL
null ever, and a UNIX epoch timestamp is the a representation I’d prefer
on accounts of being widely supported, compact, and trivial and
efficient to do comparison and computation with, followed by an ISO
textual notation on accounts of being as standard as they get.

David V.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs