2012-03-17 31 views
12

Estoy creando un módulo en python, en el que recibo la fecha en formato entero como 20120213, que significa el 13 de febrero de 2012. Ahora, quiero convertir esta fecha entera formateada en un objeto de fecha python.Cómo convertir un entero en objeto de fecha python?

Además, si hay algún medio por el cual pueda restar/agregar el número de días en dicha fecha entera formateada para recibir el valor de la fecha en el mismo formato? como restar 30 días de 20120213 y recibir respuesta como 20120114?

Respuesta

13

que sugeriría el siguiente enfoque simple para la conversión:

from datetime import datetime, timedelta 
s = "20120213" 
# you could also import date instead of datetime and use that. 
date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8])) 

Para añadir/restar una cantidad arbitraria de días (. Segundo trabajo también por cierto), se puede hacer lo siguiente:

date += timedelta(days=10) 
date -= timedelta(days=5) 

Y convertir de nuevo usando:

s = date.strftime("%Y%m%d") 

Para conv ert el número entero a una cadena de seguridad, utilice:

s = "{0:-08d}".format(i) 

Esto asegura que su cadena es ocho charecters larga e izquierda-rellenado con ceros, incluso si el año es menor de 1000 (años negativos podría convertirse divertido sin embargo).

Además referencia: datetime objects, timedelta objects

+0

thnx :) Happy Coding ... – Uday0119

+0

pero lo que estoy recibiendo no es una cadena. Es un número entero – Uday0119

+1

Bueno, eso no es difícil, puedes usar str (x) para convertir el entero en una cadena. – Peter

14

Esta pregunta ya está contestada, pero para el beneficio de otros que buscan en esta pregunta me gustaría añadir la siguiente sugerencia: En lugar de hacer lo mismo cortar como se sugirió anteriormente se también podría usar strptime() que es (IMHO) más fácil de leer y quizás la forma preferida de hacer esta conversión.

import datetime 
s = "20120213" 
s_datetime = datetime.datetime.strptime(s, '%Y%m%d') 
2

Aquí es lo que creo que responde a la pregunta (Python 3, con notas de tipo):

from datetime import date 


def int2date(argdate: int): 
    """ 
    If you have date as an integer, use this method to obtain a datetime.date object. 

    Parameters 
    ---------- 
    argdate : int 
     Date as a regular integer value (example: 20160618) 

    Returns 
    ------- 
    dateandtime.date 
     A date object which corresponds to the given value `argdate`. 
    """ 
    year = int(argdate/10000) 
    month = int((argdate % 10000)/100) 
    day = int(argdate % 100) 

    return date(year, month, day) 


print(intdate2date(20160618)) 

El código anterior produce el 2016-06-18 esperado.

Cuestiones relacionadas