[pyar] Weekday de fechas muy viejas

Ariel Rossanigo arielrossanigo en gmail.com
Mie Mayo 4 09:39:52 ART 2016


Hola Matias; supongo que el problema viene porque los módulos de Python
trabajan con el calendario Gregoriano extendido [0] y en realidad ese
calendario antes de 1582 no existía; existía el juliano que tiene algunas
diferencias de días.

Hay una fórmula para corregir eso, acá la podés ver [1]. Quedaría más o
menos así:

In [1]: import datetime

In [2]: year = 156

In [3]: d = datetime.datetime(year,1,26)


In [4]: (d.weekday() + (year//100) - (year//400) - 2)%7
Out[4]: 6


Saludos

[0]: https://docs.python.org/2/library/calendar.html#module-calendar
Most of these functions and classes rely on the datetime
<https://docs.python.org/2/library/datetime.html#module-datetime> module
which uses an idealized calendar, the current Gregorian calendar
indefinitely extended in both directions. This matches the definition of
the “proleptic Gregorian” calendar in Dershowitz and Reingold’s book
“Calendrical Calculations”, where it’s the base calendar for all
computations.
[1]:
https://en.wikipedia.org/wiki/Gregorian_calendar#Difference_between_Gregorian_and_Julian_calendar_dates


El 3 de mayo de 2016, 23:58, Matíás Lang<shareman1204 en gmail.com> escribió:

> Buenas noches comunidad!
>
> Me encuentro realizando un desafío de Python Challenge (lo recomiendo
> para alguien que quiera divertirse un rato rompiéndose la cabeza) y me
> surgió la necesidad de ver qué día cae el 26 de enero del año 156 (en
> realidad es ver en qué años esa fecha cae lunes pero no es importante).
>
> Esto lo logré corriendo un poco de código en Python (2 o 3):
>
> In [1]: import datetime
>
> In [2]: d=datetime.datetime(156, 1, 26)
>
> In [3]: d.weekday()
> Out[3]: 0
>
> Por lo que asumo que cae el lunes. Sin embargo después para corraborar
> corrí el comando `cal 156` en linux y me la fecha me da diferente:
>
>         enero
> do lu ma mi ju vi sá
>           1  2  3  4
>  5  6  7  8  9 10 11
> 12 13 14 15 16 17 18
> 19 20 21 22 23 24 25
> 26 27 28 29 30 31
> ...
>
> Como se puede ver dice que cae domingo.
>
> También probé en páginas online de calendarios como esta:
> http://www.timeanddate.com/calendar/?year=156&country=9
> y según todas cae domingo y no lunes como lo indica el módulo.
>
> El módulo calendar de python también parece estar dando mal el día:
>
> In [1]: import calendar
>
> In [2]: print(calendar.calendar(156))
>                                   156
>
>       January
> Mo Tu We Th Fr Sa Su
>           1  2  3  4
>  5  6  7  8  9 10 11
> 12 13 14 15 16 17 18
> 19 20 21 22 23 24 25
> 26 27 28 29 30 31
> ...
>
> El valor de datetime.MINYEAR es 1 en mi máquina por lo que supongo que
> debería funcionar igual de bien en el año 2016 que con el 156.
>
> Puede ser que esté mal el módulo datetime o estaré haciendo algo mal y
> no me doy cuenta?
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160504/e9172cf6/attachment.html>


Más información sobre la lista de distribución pyar