Changed the name of the field from "date" to "created_on" to avoid
confusion.
Tried with a fresh table.
Result:
*form.vars.created_on* seems to be still an object of type str.

Am I missing something? :-/

Cheers,
David


On 11 October 2012 11:45, Niphlod <[email protected]> wrote:

> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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
>>> >>>>>>
>>> >>>>>>
>>> >>>>> --
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>
>>> >>>>
>>> >>> --
>>> >>>
>>> >>>
>>> >>>
>>> >>
>>> >>
>>> > --
>>> >
>>> >
>>> >
>>>
>>> --
>>>
>>>
>>>
>>>
>>  --
>
>
>
>

-- 



Reply via email to