I was able to accomplish setting the Time Zone name (i.e., the 'dateFieldsTimezoneID' property) using the script below. I also set the 'dateFieldsRespectsDayLightSavingsTime' property to True at the same time. This script iterates through all map services and makes the adjustments, but you could adapt this for publishing as well.
import requests, urllib, ssl, json, arcpy, sys
context = ssl._create_unverified_context()
baseURL = "https://<server_name>:6443/arcgis"
userName = "admin"
passWord = "password"
timeZone = "Central Standard Time"
parameters = urllib.parse.urlencode({'username' : userName,
'password' : passWord,
'client' : 'requestip',
'expiration': 60,
'f' : 'json'}).encode("utf-8")
response = urllib.request.urlopen(baseURL + '/admin/generateToken?',parameters, context=context).read()
jsonResponse = json.loads(response)
token = jsonResponse['token']
params = {'f': 'json', 'token': token}
req = urllib.request.Request(baseURL + '/admin/services?f=pjson', urllib.parse.urlencode(params).encode("utf-8"))
response = urllib.request.urlopen(req, context=context)
data = json.load(response)
for d in data['foldersDetail']:
folderName = d['folderName']
if folderName != 'System' and folderName != 'Utilities':
req = urllib.request.Request(baseURL + '/admin/services/' + folderName + '?f=pjson', urllib.parse.urlencode(params).encode("utf-8"))
response = urllib.request.urlopen(req, context=context)
data = json.load(response)
for i in data['services']:
serviceName = i['serviceName']
arcpy.AddMessage("Modifying " + folderName + "/" + serviceName + "...")
req = urllib.request.Request(baseURL + '/admin/services/' + i['folderName'] + '/' + serviceName + '.MapServer?f=pjson', urllib.parse.urlencode(params).encode("utf-8"))
response = urllib.request.urlopen(req, context=context)
data = json.load(response)
try:
dateFieldsTimezoneID = data['properties']['dateFieldsTimezoneID']
except:
dateFieldsTimezoneID = ""
data["properties"]["dateFieldsTimezoneID"] = timeZone
data["properties"]["dateFieldsRespectsDayLightSavingTime"] = "true"
updatedSvcJson = json.dumps(data)
editSvcURL = baseURL + '/admin/services/' + i['folderName'] + '/' + serviceName + '.MapServer/edit'
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
params = urllib.parse.urlencode({'token':token, 'f': 'json', 'service': updatedSvcJson})
r = requests.post(editSvcURL, params, headers = headers, verify = False)
params = {'f': 'json', 'token': token}
req = urllib.request.Request(baseURL + '/admin/services?f=pjson', urllib.parse.urlencode(params).encode("utf-8"))
response = urllib.request.urlopen(req, context=context)
data = json.load(response)
for i in data['services']:
if i['type'] == 'MapServer':
serviceName = i['serviceName']
arcpy.AddMessage("Modifying " + "root/" + serviceName + "...")
req = urllib.request.Request(baseURL + '/admin/services/' + serviceName + '.MapServer?f=pjson', urllib.parse.urlencode(params).encode("utf-8"))
response = urllib.request.urlopen(req, context=context)
data = json.load(response)
try:
dateFieldsTimezoneID = data['properties']['dateFieldsTimezoneID']
except:
dateFieldsTimezoneID = ""
data["properties"]["dateFieldsTimezoneID"] = timeZone
data["properties"]["dateFieldsRespectsDayLightSavingTime"] = "true"
updatedSvcJson = json.dumps(data)
editSvcURL = baseURL + '/admin/services/' + serviceName + '.MapServer/edit'
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
params = urllib.parse.urlencode({'token':token, 'f': 'json', 'service': updatedSvcJson})
r = requests.post(editSvcURL, params, headers = headers, verify = False)