Can someone explain why wordpress uses two column for storing time values?

The post_date is the post_date_gmt after the Timezone value (in Settings) has been applied.

So, if you like, the reasoning is that there’s a standard time for everybody, and then your own site’s time depending on your Settings, so say you want to change that later, the standard time is always left untouched.