Two code snippets involving time-change
I definitely think sample #1 is more readable. The main reason is the (lack of) ternary operator. Although any programmer should understand it, it increases the amount of code you have to read. With sample #1 you can quickly skip the parts after + in the hours and minutes assignments, whereas with ? : you have to read more carefully.

Also, in sample #2 you basically add handling of a special case without needing it, adding unneeded complexity.

Another bonus in sample #1 is that night is not defined in the middle of the hours/minutes/seconds block, so the code is more logically grouped.

By the way, I think the use of shift should be documented with a comment.