with example create python datetime timezone

create - timedelta python example



Determine la hora de inicio y finalización del día actual(UTC-> EST-> UTC); Pitón (6)

Definitivamente le daría una mirada a Delorean , para resolver su problema seguiría algunos pasos.

Primero necesitas analizar tu cadena. Excelente uso del método de parse Delorean.

>>> from delorean import parse >>> d = parse("Wed, 20 Feb 2013 03:51:39 +0000") >>> d Delorean(datetime=2013-02-20 03:51:39+00:00, timezone=UTC)

Una vez que tenga la fecha y hora que analizó en un objeto Delorean, simplemente la convierte a EST

>>> d = d.shift(''US/Eastern'') >>> d Delorean(datetime=2013-02-19 22:51:39-05:00, timezone=US/Eastern)

Aunque sin sentido. Nunca lo usas para nada en tu pregunta, pero es muy fácil con Delorean.

Entonces tienes el tiempo ahora en EST

de delorean import Delorean

>>> d1 = Delorean(timezone="US/Eastern") >>> d1 Delorean(datetime=2013-02-21 00:35:56.405256-05:00, timezone=US/Eastern)

Ahora para el paso de truncation .

>>> d.truncate(''day'') Delorean(datetime=2013-02-21 00:00:00-05:00, timezone=US/Eastern)

hacer el simple cambio de arriba a UTC.

Ahora consigue el final del día.

d = d.next_day(1) # move to the next day

Luego para retroceder un segundo. Algo que la biblioteca necesita, estaré actualizando esto. Simplemente obtenga la fecha y hora del ejemplo de Delorean solicitándola con el atributo datetime y datetime .

d.datetime - timedelta(seconds=1) datetime.datetime(2013, 2, 21, 23, 59, 59, tzinfo=<DstTzInfo ''US/Eastern'' EST-1 day, 19:00:00 STD>)

Buena suerte, pero esta biblioteca debería simplemente tratar con operaciones de fecha y hora :)

Estoy almacenando todos mis tiempos en UTC y mi sistema está configurado en UTC (aunque estoy en EST).

Tengo las fechas almacenadas como:

Wed, 20 Feb 2013 03:51:39 +0000

Sin embargo, me gustaría seleccionar información basada hoy en día para EST, por lo que estoy intentando:

  • Obtener la hora actual como UTC y cambiar a EST

    datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz(''America/New_York'')) 2013-02-19 23:17:20.560898-05:00

  • A continuación, deseo obtener la hora de inicio para el día EST (2013-02-19 00: 00: 00.000000-05: 00) y la hora de finalización (2013-02-19 23: 59: 59.99999-05: 00)

  • Una vez que tenga esos valores, me gustaría volver a convertirlos a UTC, así que tengo un valor alto y bajo que puedo controlar, y así es mi EST (mi zona horaria) correcta.

Si esta no es la mejor manera de hacerlo, o si me falta algo (me parece demasiado complicado), ¡ayúdeme a ver la luz!

TIA

Actualización por respuesta:

d1 = datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz(''America/New_York'')) print d1.strftime("%m %d %Y") ; d2 = d1.replace(day=d1.day + 1) ; print d2.strftime("%m %d %Y")

Eso me dara

02 20 2013 02 21 2013

Cual es correcta. Ahora necesito generar el tiempo completo de EST a partir de eso y luego convertirlo a UTC. Esto no lo puedo entender. En realidad, es probable que quiera convertir a la marca de tiempo de la época UTC cuando esté completo porque eso hará que las operaciones de mi base de datos sean bastante fáciles (<,>, ==, etc.).


El primer paso para obtener la hora actual como UTC y convertirla a EST parece un poco inútil. ¿Usas ese tiempo para algo?

Aparte de eso, parece bastante sencillo. Desea obtener el inicio y el final de un día EST en UTC, por lo que los crea y los convierte a UTC. Eso no es tan complicado. :-)

Sin embargo, es posible que desee ver sus rutinas coincidentes, de modo que pueda usar el comienzo de hoy como el valor más bajo y el comienzo de mañana como el más alto, para que no tenga que lidiar con ese tiempo 23: 59: 59.9999 .

Actualizar:

Desde mi comprensión original de tu pregunta, esto es lo que quieres hacer:

Primero desea obtener la fecha actual tal como está en UTC (por lo tanto, a las 11 pm EST del 12, quiere el 22, ya que es el 22 en UTC en ese momento).

>>> from datetime import datetime >>> today = datetime.utcnow().date() >>> today datetime.date(2013, 2, 21)

En segundo lugar, desea 00:00:00 de ese día en UTC, como inicio para una búsqueda.

>>> from dateutil import tz >>> start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()) datetime.datetime(2013, 2, 21, 0, 0, tzinfo=tzutc())

Excepto que quieres saber qué hora es en Nueva York:

>>> from dateutil import tz >>> est = tz.gettz(''America/New_York'') >>> start = start.astimezone(est) >>> start datetime.datetime(2013, 2, 20, 19, 0, tzinfo=tzfile(''/usr/share/zoneinfo/America/New_York''))

Y también quieres mañana como final:

>>> from datetime import timedelta >>> end = start + timedelta(1) >>> end datetime.datetime(2013, 2, 21, 19, 0, tzinfo=tzfile(''/usr/share/zoneinfo/America/New_York''))

Resumen:

today = datetime.utcnow().date() start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()).astimezone(est) end = start + timedelta(1)


Esta es solo una respuesta parcial, porque el resto ha sido bien cubierto. Luché con esto por un tiempo, ya que algunas tecnologías tienen búsquedas inclusivas, y no quiero incluir ningún dato del primer microsegundo del día siguiente.

Mi solución para encontrar el final del día de manera rápida y correcta es esta:

reference_time.replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1,microseconds=-1)


La pregunta es vieja pero quizás esto ayude:

import datetime end_of_today = datetime.datetime.combine(datetime.datetime.today(), datetime.time(23, 59, 59, 999999))


Solo encontré esto, aquí está la opción más simple que encontré:

from delorean import Delorean today_d = Delorean() sod_dt = today_d.start_of_day eod_dt = today_d.end_of_day sod_d = Delorean(sod_dt) eod_d = Delorean(eod_dt) sod_e = sod_d.epoch eod_e = eod_d.epoch

para confirmar:

In [69]: eod_e - sod_e Out[69]: 86399.99999904633

lo suficientemente cerca para la mayoría de la gente


use datetime pytz resolverá su problema.

def get_start_and_end(): tz = pytz.timezone(''Asia/Shanghai'') today = datetime.now(tz=tz) start = today.replace(hour=0, minute=0, second=0, microsecond=0) end = start + timedelta(1) return start, end