NSDate objects are essentially stored as GMT values. The problem you are facing is that you are doing calculations using currentCalendar (which may be in DST at the moment) and localTimeZone secondsFromGMT, which switches depending on the time of year.
The best solution here is to use NSCalendar, which is GMT instead of being based on a time zone that moves if (as you specify) you want them to always be +0000.
Alternatively, you can change the use of NSTimeZone secondsFromGMTForDate: which takes into account the DST for the date / time in question.
gaige source share