Converting to string, substringing and parsing to integers is not really nice. And the DateTime-constructor you use is used wrongly: the first argument is the year and not the day.
Long live integer division and modulo:
int d = 25122009;
DateTime date =
d / 1000000,
(d / 10000) % 100,
d % 10000);
Indeed, string conversion is hackish, but it has the benefit of being human-readable without needing to think too much about base-10 division.
As for why I got the parameters wrong: I was getting it right in principle, I wasn't intending for my code to be taken verbatim (and if they did, it's a good exercise in why it's a good idea not to, so I can argue I got it wrong