Yup, I was caught by something similar myself. It gets even more fun when you get to the other end of the year and you find out there's a day with 25 hours in it. :-) This led to one app I worked on declaring that October had 32 days in one particular menu, because a previous programmer on the project had subtracted the time_t() of 1st October from the time_t() of 1st November, then divided by 86400 to get the number of days in the month, then rounded up for some reason (probably because six months earlier he'd spotted that April only had 29 days, and rather than find out why, he just fudged it, the so-and-so!).
This was partly due to the Microsoft C V5 library (yes, it was that long ago, early 90s) handling DST stupidly; the same module in the V6 library fixed the problem. However we couldn't upgrade the whole library as it would have bust our memory requirements and caused other, now long forgotten problems, so we shut our eyes, crossed our fingers, and substituted V5's time module with the V6 version and, thank God, it worked perfectly without trashing everything.
We also rewrote our own code to do stuff a bit more cleverly than that. And at least we tested. Which is more than Apple seemed to have done. I wrote Y2K-aware time-handling code back in the mid-80s for some filling station EPOS machines, which damn well worked 15 years later, because I'd tested it.
To get back to the subject line, this is why I still use a real alarm clock, only using my mobile's alarm as extra backup for important things like catching flights. I've written enough time code to know how difficult it can be to get it done truly correctly, but you really would have thought Apple would have the knack by now.