[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Ruby DateTime and MySQL datetime

Josselin

10/15/2006 9:36:00 PM

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

5 Answers

????? ????

10/15/2006 10:17:00 PM

0

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');

David Vallner

10/16/2006 2:06:00 AM

0

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 Vallner

Roseanne Zhang

10/16/2006 2:27:00 AM

0

David Vallner 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 Vallner

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.



--
Posted via http://www.ruby-....

David Vallner

10/16/2006 3:05:00 AM

0

Roseanne Zhang 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 Vallner

Josselin

10/16/2006 5:52:00 AM

0

On 2006-10-16 05:04:34 +0200, David Vallner <david@vallner.net> said:

>
> Roseanne Zhang wrote:
>> Yes, I used MySQL timestamp, which is better since it initialize itself=
> =20
>> if you don't.
>> =20
>
> 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 Vallner
>
>
>
> 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