Skip to Content
Menu
Dette spørgsmål er blevet anmeldt

Hello,

My local time zone is 'Asia/Yangon,' but my Odoo database records datetime in UTC time. As a result, every time I generate a record directly from the database, it shows a 6.30-hour difference. Could you please guide me on how to convert the time zone of records generated directly from the database? Your assistance is greatly appreciated.

l.date_order -> This records which I want to change the Time Zone.


class PosReportGenerator(models.Model):
​_name = "pos.report"
​pos_report = fields.Char(string="PoS Report")
​date_from = fields.Datetime(string="Date From")
​date_to = fields.Datetime(string="Date to")
​report_type = fields.Selection([('report_by_order', 'Report By Order'),
​('report_by_order_detail', 'Report By Order Detail'),
​('report_by_product', 'Report By Product'),
​('report_by_categories', 'Report By Categories'),
​('report_by_salesman', 'Report By Salesman'),
​('report_by_payment', 'Report By Payment')],
​default='report_by_order')

def convert_time_zone(self,trans_date):
​tz = self.env.user.partner_id.tz and pytz.timezone(self.env.user.partner_id.tz) or pytz.utc
​localized_order_date = pytz.utc.localize(datetime.strptime(str(trans_date), "%Y-%m-%d %H:%M:%S")).astimezone(tz)
​return localized_order_date
def _get_report_sub_lines(self, data, report, date_from, date_to):
​report_sub_lines = []
​new_filter = None
​if data.get('report_type') == 'report_by_order':
​query = '''select l.name,l.date_order,l.partner_id,l.amount_total,l.note,l.user_id,res_partner.name,l.name as shop,pos_session.name as session,
​res_users.partner_id as user_partner,sum(pos_order_line.qty),l.id as id,
​(SELECT res_partner.name as salesman FROM res_partner WHERE res_partner.id = res_users.partner_id)
​from pos_order as l
​left join pos_session on l.session_id = pos_session.id
​left join res_partner on l.partner_id = res_partner.id
​left join res_users on l.user_id = res_users.id
​left join pos_order_line on l.id = pos_order_line.order_id'''
​term = 'Where '
​if data.get('date_from'):
​query += "Where l.date_order >= '%s' " % data.get('date_from')
​term = 'AND '
​if data.get('date_to'):
​query += term + "l.date_order ​query += "group by l.user_id,res_users.partner_id,res_partner.name,l.partner_id,l.date_order,pos_session.name,l.session_id,l.name,l.amount_total,l.note,l.id"
​self._cr.execute(query)
​report_by_order = self._cr.dictfetchall()
​report_sub_lines.append(report_by_order)
Avatar
Kassér
Bedste svar

Hi,

To get current date time, you can follow the code below,
current_time = datetime.now()
user_tz = pytz.timezone(
request.env.context.get('tz') or request.env.user.tz)
date_today = pytz.utc.localize(current_time).astimezone(user_tz)
formatted_time = datetime.strftime(date_today, '%H:%M:%S')


Hope it helps

Avatar
Kassér
Forfatter

Thanks for sharing your information.
But I have retrieved the data directly from SQL. How can I convert l.date_order data time zone in that case.
Please guide me.

if data.get('date_from'):
query += "Where l.date_order >= '%s' " % data.get('date_from')
​ ​term = 'AND '

Forfatter

Hi
I'm finally found the solution to change the Time Zone which is directly from the Database.

if data.get('date_from'):
query += "Where l.date_order AT TIME ZONE 'UTC' AT TIME ZONE 'Your Time Zone' >= '%s' " % data.get('date_from')
term = 'AND '

Related Posts Besvarelser Visninger Aktivitet
1
jun. 23
1988
1
maj 23
5441
3
apr. 24
2923
1
mar. 23
2312
3
aug. 19
4923