datamigration from datefield to datetimefield
The GMT offset for Pacific/Auckland is UTC+12 (hours).
datetime.datetime(2014, 5, 4, 12, 0, tzinfo=UTC) represents noon UTC on the 4th. But due to the offet, this is midnight in Auckland. However, midnight in Auckland is in fact "hour 0" on the 5th. 
So, yes, the issue does have to do with timezones, but it's in fact not an issue. The date didn't change, it's just expressed in a different timezone.

Naturally, you could rollback the migration, and you account for timezones differently in step 1 where you transform the date into a datetime.
I'm just wondering where/what did I do wrong. So here's the scenario.
I have a field date = DateField() then I want to change it to date = DateTimeField() without losing the data stored from it.
What I did:

Add temporary field temp = DatetimeField() then transfer the value from date = DateField() to temp by datamigration
remove date = DateField()
Add date = DateTimeField()
Transfer stored value from temp to date

Everything went great, no errors. But one thing changed, the value.
For example:
Old data: datetime.date(2014, 5, 5)
New data: datetime.datetime(2014, 5, 4, 12, 0, tzinfo=UTC)
So my question is, why did it changed and deduct 1 day from the original value? Any thoughts? Is it because of the timezone? Timezone was set to Pacific/Auckland
Any help would be much appreciated. Thanks!