Timezone conversion: the edge cases that bite

DST, half-hour offsets, timezones with historical changes, and the midnight that doesn't exist. If your code assumes 24 hours a day, it's wrong.