Convertir un dato "string" a "date"

53 views
Skip to first unread message

BlackLion

unread,
Feb 23, 2012, 7:17:01 AM2/23/12
to web2py-usuarios
Basicamente lo que se desea es tomar un dato capturado por
request.post_vars, que es "string", convertirlo en "date" y guardarlo
en una variable para darle otro uso. Quisiera saber si esto es posible

Joaquin Orbe

unread,
Feb 23, 2012, 7:30:17 AM2/23/12
to web2py-...@googlegroups.com

No tengo a mano el formato del string que devuelve request, pero si es
del estilo

'2012-02-23'

podrias hacer algo asi:

import datetime
fecha = datetime.date(*tuple(int(i) for i in
request.post_vars.tu_variable.split('-')))

Saludos,
Joaco.

Omar Fariñez

unread,
Feb 23, 2012, 8:15:52 AM2/23/12
to web2py-...@googlegroups.com
gracias, funcionó sin embargo cuando quiero comparar la variable creada con otra que esta en un tabla que también es tipo date la comparación no se da
--
Omar Fariñez

Alan Etkin

unread,
Feb 23, 2012, 8:37:42 AM2/23/12
to web2py-usuarios
En otro hilo se consulta algo similar:
http://groups.google.com/group/web2py-usuarios/browse_thread/thread/79abc141f542ed5c

Podés usar la función datetime.datetime.strptime() de la librería
estándar de Python, que toma una cadena y una especificación de
formato y devuelve un objeto datetime.

¿En qué consiste la comparación? ¿Podés copiar la parte del código que
no te funciona?
Si las variables contienen objetos datetime no debería de haber
problemas al comparar

On 23 feb, 10:15, Omar Fariñez <omar.fari...@gmail.com> wrote:
> gracias, funcionó sin embargo cuando quiero comparar la variable creada con
> otra que esta en un tabla que también es tipo date la comparación no se da
>
> El 23 de febrero de 2012 08:30, Joaquin Orbe <joaquino...@gmail.com>escribió:

Omar Fariñez

unread,
Feb 23, 2012, 8:53:49 AM2/23/12
to web2py-...@googlegroups.com
cuando utilizo  datetime.datetime.strptime() o  datetime.datetime.strftime(), me da error dice que el modulo no conoce el atributo 'strptime' o 'strftime'. Aqui les muestro el codigo de la consulta:
Modelo:

db.define_table ('linea_corte', Field('n_disco_10','integer',notnull=True,default=0,requires=IS_INT_IN_RANGE(0,15000)),
                                Field('n_disco_18','integer',notnull=True,default=0,requires=IS_INT_IN_RANGE(0,15000)),
                                Field('n_disco_43','integer',notnull=True,default=0,requires=IS_INT_IN_RANGE(0,15000)),
                                .
                                .
                                .
                                .
                                Field('fecha','date',default=now,writable=False,readable=False),
                                Field('turno','string',length=5,notnull=True)
                                 )

db.define_table ('consulta', Field('fecha','date',requires=IS_NOT_EMPTY(),label='Fecha de Consulta'),
                             Field('turno','string',requires=IS_NOT_EMPTY(),label='Turno de Consulta'))
Controlador:

def consulta():
    
    consulta=SQLFORM(db.consulta, submit_button=('Enviar'), _action=URL('rpd'))
    if consulta.process().accepted:
        response.flash = 'Hecho!'
    elif consulta.errors:
        response.flash = 'Coloque la información correctamente'
    else:
        response.flash = 'Indique la fecha y el turno de su consulta, por favor'
        

    return dict(consulta=consulta)   

def rpd():
    date = request.post_vars.fecha 
    shift = request.post_vars.turno
    import datetime
    """
    dt = datetime.date(*tuple(int(i) for i in
    request.post_vars.fecha.split('-')))"""
    dt = now
    lcf = db.linea_corte.fecha
    lct = db.linea_corte.turno
--
Omar Fariñez

Omar Fariñez

unread,
Feb 23, 2012, 8:57:12 AM2/23/12
to web2py-...@googlegroups.com
en realidad el rpd es asi:

def rpd():
    date = request.post_vars.fecha 
    shift = request.post_vars.turno
    import datetime
   
    dt = datetime.date(*tuple(int(i) for i in
    request.post_vars.fecha.split('-')))
   
    lcf = db.linea_corte.fecha
    lct = db.linea_corte.turno

el dt=now lo habia colocado para probar si se hacia la comparacion
--
Omar Fariñez

Joaquin Orbe

unread,
Feb 23, 2012, 8:59:29 AM2/23/12
to web2py-...@googlegroups.com
On Thu, Feb 23, 2012 at 10:57 AM, Omar Fariñez <omar.f...@gmail.com> wrote:
> en realidad el rpd es asi:
>
> def rpd():
>     date = request.post_vars.fecha
>     shift = request.post_vars.turno
>     import datetime
>
>     dt = datetime.date(*tuple(int(i) for i in
>     request.post_vars.fecha.split('-')))
>
>     lcf = db.linea_corte.fecha
>     lct = db.linea_corte.turno
>
> el dt=now lo habia colocado para probar si se hacia la comparacion

Que parte del metodo rpd() no te funciona? ahi no se ve ninguna comparacion

Omar Fariñez

unread,
Feb 23, 2012, 9:26:09 AM2/23/12
to web2py-...@googlegroups.com
creo que excedi los caracteres, mil disculpas las comparaciones son estas:

def rpd():
    date = request.post_vars.fecha 
    shift = request.post_vars.turno
    import datetime
    
    dt = datetime.date(*tuple(int(i) for i in
    request.post_vars.fecha.split('-')))
    
    lcf = db.linea_corte.fecha
    lct = db.linea_corte.turno
    
    d10 = db((lcf == dt) & (lct == shift)).select('n_disco_10')
    d18 = db((lcf == dt) & (lct == shift)).select('n_disco_18')
    d43 = db((lcf == dt) & (lct == shift)).select('n_disco_43')
        


Joaquin Orbe

unread,
Feb 23, 2012, 9:45:23 AM2/23/12
to web2py-...@googlegroups.com

Cuando decis que la comparacion "no se da", te referis a que no
matchea contra los valores de la tabla ó que te da error?
Otra cosa, en los selects usas comillas simples para las columnas
n_disco...eso te anda? proba con db.linea_corte.n_disco_10 y demas

Omar Fariñez

unread,
Feb 23, 2012, 10:03:26 AM2/23/12
to web2py-...@googlegroups.com
Cuando digo que no se da la comparación es que no se hace match entre los valores que estoy comparando, lo del select si me funciona porque probé con dt=now y me trae los campos de las tablas que seleccioné.

Joaquin Orbe

unread,
Feb 23, 2012, 10:15:31 AM2/23/12
to web2py-...@googlegroups.com

Pareciera que esta todo bien (capaz que se nos esta escapando una
obviedad). No te va a quedar otra que debuguear y/o mandar a una view
el valor de date y el que vos esperas que te devuelva. Por ej, si vos
sabes que te tiene que devolver los registros con id (2,3,6), hace un
select de esos id y mostralos todos a ver que pasa.

Saludos,
Joaco.

Reply all
Reply to author
Forward
0 new messages