40 lines
1.3 KiB
Markdown
40 lines
1.3 KiB
Markdown
# 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)
|
|
```
|