diff --git a/addons/hr_work_entry_contract/models/hr_contract.py b/addons/hr_work_entry_contract/models/hr_contract.py
index b1ce9b6e92414e389cb1f59c51c2f936112b7326..2dbf2e63b7007e77c6519b278eb600489b8f4440 100644
--- a/addons/hr_work_entry_contract/models/hr_contract.py
+++ b/addons/hr_work_entry_contract/models/hr_contract.py
@@ -302,7 +302,12 @@ class HrContract(models.Model):
 
         for interval, contracts in intervals_to_generate.items():
             date_from, date_to = interval
-            vals_list.extend(contracts._get_work_entries_values(date_from, date_to))
+            timezones = contracts.resource_calendar_id.mapped('tz')
+            for timezone in timezones:
+                tz = pytz.timezone(timezone)
+                date_from = tz.localize(date_from) if not date_from.tzinfo else date_from
+                date_to = tz.localize(date_to) if not date_to.tzinfo else date_to
+                vals_list.extend(contracts.filtered(lambda c: c.resource_calendar_id.tz == timezone)._get_work_entries_values(date_from, date_to))
 
         if not vals_list:
             return self.env['hr.work.entry']