Pregunta

(Soy nuevo en Python y Google App Engine, perdóneme si mis preguntas parecen básicas).

Me estoy divirtiendo mucho tratando de administrar varias zonas horarias de usuario en mi aplicación Google App Engine.

Aquí están mis limitaciones:

  1. Si un usuario ingresa la hora en una entrada, será la hora local (incluido el horario de verano, cuando corresponda).
  2. Si un usuario no ingresa la hora, el sistema debe ingresarla en su hora local (incluido el horario de verano, cuando corresponda).
  3. Cuando la fecha y la hora se muestran al usuario, deben estar en su hora local (incluido el horario de verano, cuando corresponda)

Entiendo que el tiempo se almacenará internamente como UTC con un objeto tzinfo y que App Engine almacenará los Modelos con tiempo UTC.

Anteriormente pensé que tenía todo esto resuelto al pedirle al usuario que especificara su zona horaria en sus preferencias. Luego, simplemente cargaría sus preferencias y agregaría ese tzinfo a cualquier objeto de fecha y hora en referencia a ese usuario.

Sin embargo, nuestro horario de verano reciente lo rompió. Resulta que no había implementado correctamente el dst () en mis objetos tzinfo. Según tengo entendido, debo determinar si DST está actualmente activado y, de ser así, devolver el desplazamiento correcto para tzinfo.

El problema es que no tengo idea de cómo determinar si el horario de verano de la zona horaria es actual o no. ¿Me estoy perdiendo algo obvio?

¿Fue útil?

Solución

Si puede, le recomiendo que eche un vistazo al paquete python-dateutil , que tiene objetos tz preconstruidos para todas las zonas horarias, incluida la información de desplazamiento DST. No creo que haya una manera de "simplemente saber" si el horario de verano está activado o no sin datos de respaldo ... está basado en la fecha para la mayoría de las zonas horarias (o, al menos, las zonas horarias que admiten DST), y las fechas varían según la costumbre local, la política y todo tipo de cosas.

http://labix.org/python-dateutil

Otros consejos

Veo algunos problemas aquí.

Si el usuario ingresa la hora, la ingresa en la zona horaria local, pero ¿cómo sabe cuál es? ¿Europa / Vilna o Europa / Madrid? O tal vez Australia / Melbourne? Si no conoce la zona horaria, la fecha / hora se convierte en "ingenua".

La única base de datos de zonas horarias que se considera apropiada y precisa (considerando el estado de flujo constante) es Olson timezone db, disponible para Python como paquete pytz . Permite convertir fácilmente fechas / horas entre zonas horarias: primero toma la fecha / hora y la zona horaria del usuario, localiza la fecha / hora en la zona horaria del usuario y luego la toma como utc, listo para guardar en su base de datos. La visualización es al revés: obtenga la fecha / hora de la base de datos, localice en utc, luego visualice como zona horaria del usuario.

Y lo último: no existe la transformación automática de DST . En el caso de fechas / horas ambiguas, debe saber de antemano en qué zona horaria se ingresa la hora. Esa es nuestra realidad humana.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top