Daily reduction variables are not (always) the same as the reduction of hourly variables

Hello,

When I request daily reductions (e.g. sum) of some variables – total_precipitation for instance – I do not find the same values as when I download the 24 hourly variables and sum them on my side.

I’m using "time_zone": "utc+00:00" to compare against the standard hourly variables in UTC.

What I don’t understand is that despite passing "time_zone": "utc+00:00", I see these lines printed in my terminal when I launch the request:

2024-12-04 17:50:34,236 INFO Request ID is f16deaaa-78d4-43c9-bb0b-d2dc255085fb
2024-12-04 17:50:34,298 INFO status has been updated to accepted
2024-12-04 17:50:39,311 INFO status has been updated to running
2024-12-04 17:51:07,022 INFO Daily reduction: sum {'time_shift': {'hours': -1}, 'remove_partial_periods': True}

If I change my request to pass "time_zone": "utc+01:00" instead of "utc+00:00", I get the following printed in my terminal:

2024-12-04 18:03:45,987 INFO Request ID is e58b5d61-75eb-4424-ab75-06d33878ff48
2024-12-04 18:03:46,748 INFO status has been updated to accepted
2024-12-04 18:04:08,743 INFO Daily reduction: sum {'time_shift': {'hours': 0}, 'remove_partial_periods': True}
2024-12-04 18:04:08,743 INFO status has been updated to running

The values match exactly what I have if I sum the hourly variables on my side.

If this behaviour was consistent I would adapt my requests, but if I request a different variable (e.g. u10) with "time_zone": "utc+00:00" I see the following printed in my terminal:

2024-12-04 18:16:58,687 INFO Request ID is d64770f4-036c-482d-8a86-b5e082dbec48
2024-12-04 18:16:58,727 INFO status has been updated to accepted
2024-12-04 18:17:03,762 INFO status has been updated to running
2024-12-04 18:17:07,345 INFO Daily reduction: mean {'time_shift': {'hours': 0}, 'remove_partial_periods': True}

And the values match precisely what I get when I reduce the hourly variables.

Is this behavior expected? Is there something special about some variables that "time_zone": "utc+00:00" leads to a time shift of -1 while other variables lead to a time shift of zero?

Many thanks for any reply on this topic, even if it is to acknowledge that you are looking into it :pray:

I’m really the only one facing this issue?

You are not alone. I have the same problem. When I download daily means of 2m temperature, some days have the message “Daily reduction: mean {‘time_shift’: {‘hours’: 0}, ‘remove_partial_periods’: True}”, while others not. I’m confused about this inconsistence.

For info, here is the reply I received via ECMWF support:

Thank you for your enquiry to ECMWF Support.

There are 2 types of variables in ERA5 data: instantaneous and accumulated variables.

Please refer to this Knowledge Base article for details: ERA5 terminology: analysis and forecast; time and steps; instantaneous and accumulated and mean rates and min/max parameters

You may also find the following part of the ERA5 documentation of interest: ERA5: data documentation - Copernicus Knowledge Base - ECMWF Confluence Wiki

and this page also: Conversion table for accumulated variables (total precipitation/fluxes)

So it seems that the difference arises between instantaneous and accumulated variables.