И так, есть проект в котором есть модуль на Фортране, с оберткой на R, с которым через rpy2 взаимодействует Python. Что характерно, лично я этим не пользовался, оно просто лежит и где-то глубоко юзается. Так вот, имеем допустим в консоли ./manage.py shell
такое -
In [3]: import datetime
In [4]: datetime.datetime.strptime("02/15/2015 03:20 PM", "%m/%d/%Y %I:%M %p")
Out[4]: datetime.datetime(2015, 2, 15, 15, 20)
Гут, все норм.
На всякий случай.
In [5]: import locale
In [6]: locale.getlocale()
Out[6]: (None, None)
Где-то выкопал, что может отличаться формат в зависимости от локали.
И тут ВНЕЗАПНО:
In [7]: from rpy2.robjects.packages import importr
In [8]: datetime.datetime.strptime("02/15/2015 03:20 PM", "%m/%d/%Y %I:%M %p")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-6d5951006da4> in <module>()
----> 1 datetime.datetime.strptime("02/15/2015 03:20 PM", "%m/%d/%Y %I:%M %p")
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
326 if len(data_string) != found.end():
327 raise ValueError("unconverted data remains: %s" %
--> 328 data_string[found.end():])
329
330 year = None
ValueError: unconverted data remains: PM
Смотрим:
In [9]: locale.getlocale()
Out[9]: ('ru_RU', 'UTF-8')
In [12]: locale.setlocale(locale.LC_ALL, 'en_US.utf8')
Out[12]: 'en_US.utf8'
In [13]: locale.getlocale()
Out[13]: ('en_US', 'UTF-8')
In [14]: datetime.datetime.strptime("02/15/2015 03:20 PM", "%m/%d/%Y %I:%M %p")
Out[14]: datetime.datetime(2015, 2, 15, 15, 20)
Я пока заткнул ручным преобразованием из 12-часового формата в 24х. Там еще pytz
юзается с таймзонами. И вот в связи с этим у меня несколько воросов:
- Можно ли просто в коде, где юзаютя таймзоны, вот так взять и вручную грубо изменить локаль? Сайт, вроде, американский и у них ошибки кагбэ нет.
- Можно это вменяемо пофиксить без ручного преобразования из формата 12 в 24.
- И, если кто знает, что там вообще происходит и как с этим жить?
Updated 5 Feb. 2015, 13:35 by alexscrat.