Часовые пояса хитры, потому что нет определенного стандарта, хотя может показаться, что он есть. Я столкнулся с этой проблемой некоторое время назад и создал этот список из библиотеки Swift:
"HST": "Pacific/Honolulu", -10
"AKST": "America/Juneau", -9
"AKDT": "America/Juneau", -9
"PDT": "America/Los_Angeles", -8
"PST": "America/Los_Angeles", -8
"MST": "America/Phoenix", -7
"MDT": "America/Denver", -7
"CDT": "America/Chicago", -6
"CST": "America/Chicago", -6
"PET": "America/Lima", -5
"COT": "America/Bogota", -5
"EDT": "America/New_York", -5
"EST": "America/New_York", -5
"AST": "America/Halifax", -4
"ADT": "America/Halifax", -4
"NST": "America/St_Johns", -330
"NDT": "America/St_Johns", -330
"CLST": "America/Santiago", -3
"ART": "America/Argentina/Buenos_Aires", -3
"CLT": "America/Santiago", -3
"BRT": "America/Sao_Paulo", -2
"BRST": "America/Sao_Paulo", -2
"GMT": "GMT", 0
"UTC": "UTC", 0
"WET": "Europe/Lisbon", 0
"BST": "Europe/London", 0
"WEST": "Europe/Lisbon", 0
"CEST": "Europe/Paris", +1
"CET": "Europe/Paris", +1
"WAT": "Africa/Lagos", +1
"EEST": "Europe/Athens", +2
"CAT": "Africa/Harare", +2
"EET": "Europe/Athens", +2
"MSK": "Europe/Moscow", +3
"MSD": "Europe/Moscow", +3
"TRT": "Europe/Istanbul", +3
"EAT": "Africa/Addis_Ababa", +3
"IRST": "Asia/Tehran", +330
"GST": "Asia/Dubai", +4
"PKT": "Asia/Karachi", +5
"IST": "Asia/Kolkata", +530
"BDT": "Asia/Dhaka", +6
"ICT": "Asia/Bangkok", +7
"WIT": "Asia/Jakarta", +7
"SGT": "Asia/Singapore", +8
"PHT": "Asia/Manila", +8
"HKT": "Asia/Hong_Kong", +8
"KST": "Asia/Seoul", +9
"JST": "Asia/Tokyo”, +9
"NZDT": "Pacific/Auckland", +13
"NZST": "Pacific/Auckland", +13
Дубликаты показывают, насколько «стандартными» являются эти вещи. Вы можете составить свой собственный список на основе того, что вы считаете правильным, и создать из этого набора законный рандомизатор.
Проблема с ответом Джека в том, что идентификаторы часовых поясов в Swift неравномерны; некоторые зоны перепредставлены, а другие недопредставлены в зависимости от того, сколько регионов Swift считает популярными в этой зоне. В Австралии 12 идентификаторов, хотя в стране, например, только 3 часовых пояса. Чтобы сэкономить время, вы можете просто случайным образом сгенерировать число в диапазоне от -12 часов до +14 часов в секундах и вернуть часовой пояс, используя секунды из GMT.
extension TimeZone {
static var random: TimeZone? {
return TimeZone(secondsFromGMT: Int.random(in: -43200...50400))
}
}
if let t = TimeZone.random {
print(t)
}
Если вы хотите аккуратное разделение часовых поясов, просто разделите их на блоки и случайным образом выберите из этого набора. Просто поймите, что есть также половина и четверть часовых поясов; не каждый часовой пояс является чистым плюсом или минус 1 час от своего соседа. Если вы используете этот подход, ваш массив будет иметь более 24 целых чисел, что не должно вас беспокоить.