I did my research and found out following. Only Time class is aware of DST rules, the one way in which DateTime is aware of DTS rules is when calling DateTime.now. And that's only because it calls Time.now.utc_offset underneath.

All other possible ways of constructing a new DateTime object will use an offset given explicitly as fraction of a day or zero if none was given. Therefore it does not differentiate between locations with DST rules and we need to have an easy access to local offset as fraction of a day.

That's why there is method DateTime.local_offset.
It's used in DateTime.civil_from_format which in turn is used when Time.local_time is called for time period outside of 1902/1970..2038.