We seem to be talking past each other.

You should call tzset() with the timezone of the input data. Then call strptime() with the time/date string only, no TZ string.
As a matter of procedure call tzset() for each call to strptime(). It is safer that way.

Now you have a struct tm. What do you want - GMT time and date? In other words convert from any input TZ to GMT?
You do not have to mess with DST, gmtime (or localtime) correct for that. If your tzset() call was made beforehand.

Beyond that I do not understand this thread very well.