summaryrefslogtreecommitdiff
path: root/odoo/tools/misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/tools/misc.py')
-rw-r--r--odoo/tools/misc.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py
index 7e069d22a77..356e08db371 100644
--- a/odoo/tools/misc.py
+++ b/odoo/tools/misc.py
@@ -1225,6 +1225,25 @@ def format_date(env, value, lang_code=False, date_format=False):
return babel.dates.format_date(value, format=date_format, locale=locale)
+def parse_date(env, value, lang_code=False):
+ '''
+ Parse the date from a given format. If it is not a valid format for the
+ localization, return the original string.
+
+ :param env: an environment.
+ :param string value: the date to parse.
+ :param string lang_code: the lang code, if not specified it is extracted from the
+ environment context.
+ :return: date object from the localized string
+ :rtype: datetime.date
+ '''
+ lang = env['res.lang']._lang_get(lang_code or env.context.get('lang') or 'en_US')
+ locale = babel.Locale.parse(lang.code)
+ try:
+ return babel.dates.parse_date(value, locale=locale)
+ except:
+ return value
+
def format_datetime(env, value, tz=False, dt_format='medium', lang_code=False):
""" Formats the datetime in a given format.
@@ -1249,8 +1268,10 @@ def format_datetime(env, value, tz=False, dt_format='medium', lang_code=False):
except Exception:
localized_datetime = utc_datetime
- lang = env['res.lang']._lang_get(lang_code or env.context.get('lang') or 'en_US')
- locale = babel.Locale.parse(lang.code)
+ lang_code = lang_code or env.context.get('lang') or 'en_US'
+ lang = env['res.lang']._lang_get(lang_code)
+
+ locale = babel.Locale.parse(lang.code or lang_code) # lang can be inactive, so `lang`is empty
if not dt_format:
date_format = posix_to_ldml(lang.date_format, locale=locale)
time_format = posix_to_ldml(lang.time_format, locale=locale)