We (
https://opencagedata.com/demo) return that as part of our geocoding results. If you have only a couple of hundred cities it's still within the free trial plan
"timezone": {
"name": "Asia/Amman",
"now_in_dst": 0,
"offset_sec": 7200,
"offset_string": 200,
"short_name": "EET"
},
As detaro wrote the timezone-boundary-builder project is the best data source for the shapefiles of timezones.
For a list of places the files on http://download.geonames.org/export/dump/ have a column for the timezone name. Creative Commons Attribution 4.0 License.
There are places, usually unhabitated who don't have a good timezone name, but just 'GMT-10' or such. With cities you likely don't encounter this. Short names, e.g. EET, aren't unique. There are several who share the same abbreviation.