1) Строго говоря, если пользователь не разрешает использовать CoreLocation или, если разрешение было дано, но CoreLocation недоступен, то другого запасного варианта для получения местоположения пользователя в виде пары широта и долгота не существует. Использование локали может работать не во всех случаях. Во-первых, это просто даст вам приближение, которое может быть слишком далеко от реальности. Однако вам решать, подходит ли это приближение для вашего приложения. Более того, некоторые пользователи используют локали, отличные от локали, связанной с их страной. И у вас нет никаких гарантий, что люди, путешествующие за границей, будут корректировать дату / время каждый раз.
2) Базовое местоположение кэширует по умолчанию последнее местоположение, полученное с устройства GPS. Однако для людей, выезжающих за границу, это кэшированное местоположение будет, безусловно, неправильным (даже для людей, путешествующих всего в нескольких милях), и, как правило, вы должны отбрасывать кэшированное значение и снова локализовывать пользователя каждый раз. Я понимаю, что для людей, путешествующих по своей стране, это (обычно) не создаст огромных проблем. Но это зависит только от страны: путешествие по Италии не изменит время, но путешествие по США может изменить время до 3 часов.
3) Я бы предложил попробовать использовать Core Location и, в случае проблем, просто попросить пользователя ввести его / ее местное время или местоположение (города должно быть достаточно для вашей цели). Если вы решите запросить местоположение пользователя, вы можете получить соответствующую пару широта / долгота, но для этого потребуется работающее сетевое соединение.