The semantic of the frequencies "D" and "24H" in 'date_range' has changed in pandas 0.15.0: they are now both equivalent to a "calendar daily" frequency, ie local time is kept the same across DST transition:

In [1]: import pandas as pd;pd.__version__
Out[1]: '0.15.0'
In [2]: list(pd.date_range(pd.Timestamp("2014-10-24 06:00", tz="Europe/Paris"), periods=4, freq="D"))
Out[2]:
[Timestamp('2014-10-24 06:00:00+0200', tz='Europe/Paris', offset='D'),
 Timestamp('2014-10-25 06:00:00+0200', tz='Europe/Paris', offset='D'),
 Timestamp('2014-10-26 06:00:00+0100', tz='Europe/Paris', offset='D'),
 Timestamp('2014-10-27 06:00:00+0100', tz='Europe/Paris', offset='D')]
In [3]: list(pd.date_range(pd.Timestamp("2014-10-24 06:00", tz="Europe/Paris"), periods=4, freq="24H"))
Out[3]:
[Timestamp('2014-10-24 06:00:00+0200', tz='Europe/Paris', offset='24H'),
 Timestamp('2014-10-25 06:00:00+0200', tz='Europe/Paris', offset='24H'),
 Timestamp('2014-10-26 06:00:00+0100', tz='Europe/Paris', offset='24H'),
 Timestamp('2014-10-27 06:00:00+0100', tz='Europe/Paris', offset='24H')]

But what if we do want a true "24H" frequency ? I think "D" and "24H" should not share the same semantic, Out[2] is OK but Out[3] should be:

[Timestamp('2014-10-24 06:00:00+0200', tz='Europe/Paris'),
 Timestamp('2014-10-25 06:00:00+0200', tz='Europe/Paris'),
 Timestamp('2014-10-26 05:00:00+0100', tz='Europe/Paris'),
 Timestamp('2014-10-27 05:00:00+0100', tz='Europe/Paris')]

Comment From: rockg

See #7825 for a similar discussion. There is a comment mentioning that 24H and D are equivalent in the context of date_range. To me 24H should be what you describe and D should retain its current behavior (did they used to be different?).

Comment From: broessli

Thx for the link, this is indeed the same issue, hope others will agree with us that "D" should be != "24H". They always have had the same semantic, but in previous pandas versions "D" and "24H" meant true 24 hours intervals: one just had to accept that "D" was exactly 24 hours to make sense of date_range behavior. Now with pandas 0.15.0, "D" and "24H" stand for "calendar daily" frequencies and it is harder to think of "24H" as a "calendar day" which can have 23, 24 or 25 hours.

Comment From: jreback

@rockg is this a dupe of that TL;DR discussion in #7825 (well I did read it, but many issues brought up)!

Comment From: jreback

consolidated to #20633