# Odoo development cheatsheet ## Datetime & Timezones - All datetime are stored in UTC in database - `fields.Datetime` are in UTC. They are only _displayed_ in the user's timezone ### Fetching data with specific timezone This is tricky. If for whatever reason the datetime value cannot be send directly from the UI (and so be automatically converted), the value has to be converted in the code. ```python import pytz ## Get the timezone first. This is retrieved from context then user, then default. Can be set in another way timezone = pytz.timezone(self.env.context.get('tz') or self.env.user.tz or 'UTC') ## Create a localized datetime from the date source date_tz = timezone.localize(fields.Datetime.from_string("1988-05-16 16:55:00")) ## Now get an UTC datetime from the localized one start = date_tz.astimezone(pytz.timezone('UTC')) ## If needed, set up an end date from the starting one end = start + relativedelta(years=36) # Retrieve the data awesome_guy_ids = self.env['sale.report'].search(['&', ('date', '>=', start), ('date', '<', end), ]) ``` ### Display date on context timezome If for whatever reason (reports, typically), the date is displayed in UTC instead of the contaxt timezone, use : ```python fields.Datetime.context_timestamp(self, date) ```