DateTime handling is by definition quite a challenge.
DateTime attributes can be localized or non-localized. Also in the execution of logic depends on user, project and server timezone
See more details here: https://docs.mendix.com/refguide/datetime-handling-faq and https://academy.mendix.com/link/modules/374/lectures/3046/7.1-Introduction
Apparently addDays doesn't add a day, it adds 24 hours, which causes a shift when we set time back one hour this weekend. Don’t bother with this. The first link Rene posted is in itself proof that datetimes are virtually impossible to work with. No doubt someone will tell you the described behavior is expected, while it’s just so very, very wrong.
You could try to cheat, using parseDateTime function like this:
parseDateTimeUTC(formatDateTimeUTC(addHours($YourDateVariable, 30-formatDateTimeUTC($YourDateVariable, 'HH')), 'dd-MM-yyyy') + ' ' + formatDateTimeUTC($YourDateVariable, 'HH:mm:ss'), 'dd-MM-yyyy HH:mm:ss')
This way you’re only changing the day number (and month and year, when necessary), not hours or minutes. There should be an easier way, but this is what I came up with just now.