uhm. I can't reproduce the issue. For me form.vars.whatever if is a field of type datetime is a datetime tuple. Request.vars.whatever on the other hand is always a string, as it should be.
Try with a fresh table PS: having a db with a column named "date" is a call for problems ... On Thursday, October 11, 2012 11:27:52 AM UTC+2, David Sorrentino wrote: > > Thanks for your explanation Niphlod. ;) > > I'm trying to normalize the time, as you suggested. > However I'm facing some difficulties. > > In particular I created an additional field in my table to store the > normalized time (UTC) too. So now my table looks like that: > >> db.define_table('news', >> Field('title', 'string'), >> Field('body', 'text'), >> Field('date', 'datetime'), >> Field('dateUTC', 'datetime', readable=False, writable=False) >> ) >> > > I decided to compute the field "dateUTC" onvalidation. My controller looks > like that: > >> def insertnews(): >> form = crud.create(db.news, next=URL('index'), >> onvalidation=localtime_to_utc) >> return dict(form=form) >> > > Eventually, assuming that I want to normalize the local time of Rome (+2 > hours) the function I use to do that looks so: > >> def localtime_to_utc(form): >> form.vars.dateUTC = form.vars.date - timedelta(hours=2) >> > > The problem is that *form.vars.date* seems to be a string. O_O > Indeed I get this error: > >> TypeError: unsupported operand type(s) for -: 'str' and >> 'datetime.timedelta' >> > > Now I wonder, is it normal that a form.vars is considered a string? Is > there any way to retrieve the original type (datetime), in order to compute > the normalization? > > @Alec: if I manage I'll send them a mail with the solution! ;) > > Cheers, > David > > > On 10 October 2012 14:35, Alec Taylor <alec.t...@gmail.com > <javascript:>>wrote: > >> Also if it makes you feel better LinkedIn hasn't implemented this >> properly either :P >> >> On Wed, Oct 10, 2012 at 10:57 PM, Niphlod <nip...@gmail.com <javascript:>> >> wrote: >> > welcome to datetime madness :D It's exactly what you need to take into >> > consideration if you're working with user-inputted datetimes. You'd >> need to >> > retrieve it's local date (javascript comes to the rescue, or based on >> > nation, or whatever) and calculate the difference between that and your >> > current date, then subtract/add the difference to the actually submitted >> > datetime to "normalize" it in a UTC form. >> > >> > >> > On Wednesday, October 10, 2012 1:01:35 PM UTC+2, David Sorrentino wrote: >> >> >> >> I see your point, but what if the user inserts into the datetime input >> >> field his/her current time? It will be different from the server's one >> >> (which I set to GMT), and prettydate will not work properly. >> >> >> >> I confess that I am a bit confused about that. >> >> >> >> Best, >> >> David >> >> >> >> >> >> On 10 October 2012 11:16, Niphlod <nip...@gmail.com> wrote: >> >>> >> >>> not necessarily wrong, just a different timezone. If you're going to >> >>> display "prettydates" just in the browser for a "nicer visualization" >> you >> >>> should take into consideration that your server's locatime can be >> different >> >>> from the users's browser one. >> >>> >> >>> In a "perfect" setup, your server is on GMT (that is, utc), your app >> uses >> >>> request.utcnow in all the places instead of request.now (and >> >>> datetime.datetime.utcnow() instead of datetime.datetime.utcnow()). >> You'll >> >>> have prettydate working right. >> >>> >> >>> >> >>> On Wednesday, October 10, 2012 10:38:32 AM UTC+2, David Sorrentino >> wrote: >> >>>> >> >>>> Hey Niphlod, >> >>>> >> >>>> Thank you for your help. >> >>>> >> >>>> The version is 2.0.9 (2012-10-05 09:01:45) dev >> >>>> >> >>>> I tried datetime.datetime.now() in my application and I just >> discovered >> >>>> that it is 2 hours late. This explains why prettydate is then 2 >> hours in >> >>>> hurry! >> >>>> The odd thing is that if I open a python console and try >> >>>> datetime.datetime.now(), I get the right time. O_O >> >>>> >> >>>> Something wrong with my server? >> >>>> >> >>>> Cheers, >> >>>> David >> >>>> >> >>>> >> >>>> On 10 October 2012 10:28, Niphlod <nip...@gmail.com> wrote: >> >>>>> >> >>>>> should calculate the difference between datetime.datetime.now() and >> >>>>> your date. what web2py version are you using ? >> >>>>> >> >>>>> >> >>>>> On Wednesday, October 10, 2012 10:16:24 AM UTC+2, David Sorrentino >> >>>>> wrote: >> >>>>>> >> >>>>>> Hello everybody, >> >>>>>> >> >>>>>> I am using the module prettydate, but it seems that it matches the >> >>>>>> datetime I give as input with a wrong timezone. >> >>>>>> >> >>>>>> For example now it's 10:12 am at my place. >> >>>>>> >> >>>>>> This is the datetime I give as input: 2012-10-10 10:12:00. >> >>>>>> >> >>>>>> This is the code: >> >>>>>> >> >>>>>>> from gluon.tools import prettydate >> >>>>>>> pretty_d = prettydate(input_datetime, T) >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> And this is the result: "2 hours from now". >> >>>>>> It's 2 hours in hurry!! :) >> >>>>>> >> >>>>>> Am I wrong in something? >> >>>>>> >> >>>>>> I wish you a wonderful Wednesday, >> >>>>>> David >> >>>>>> >> >>>>>> >> >>>>> -- >> >>>>> >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> -- >> >>> >> >>> >> >>> >> >> >> >> >> > -- >> > >> > >> > >> >> -- >> >> >> >> > --