iOS: Как проверить, является ли выбранное время и дата действительным во время дневного света? - PullRequest
0 голосов
/ 22 января 2020

У меня есть особый случай, чтобы проверить, где пользователь вводит будущую дату и время, и мне нужно проверить, является ли это время действительным (что я имею в виду под действительным, объяснено ниже), учитывая, что на пользователя может повлиять переход на летнее время в его часовой пояс.

Например:

  1. Предположим, что часовой пояс пользователя - Аделаида, Австралия. Откройте ссылку , чтобы увидеть, как часовой пояс влияет на Аделаиду ​​ИЛИ, см. Ниже.
4 Oct 2020 - Daylight Saving Time Starts
When local standard time is about to reach
Sunday, 4 October 2020, 2:00:00 am clocks are turned forward 1 hour to 
Sunday, 4 October 2020, 3:00:00 am local daylight time instead. 
Теперь, исходя из вышеизложенной информации, я понимаю, что мой пользователь выбрал дату и время между

4 октября 2020 года, 2: 01: 00 утра - 4 октября 2020 года, 2: 59: 00 утра

недействительно, поскольку время пересылается до 3 часов утра.

Как проверить это в приложении iOS? (Предполагая, что я)

По сути, я должен сообщить пользователю, что выбранное время зависит от летнего времени, и пользователи должны выбрать другое время.

Я смотрел API-интерфейсы для дат и часовых поясов и не могу найти ничего, что могло бы подтвердить это.

Заранее спасибо, любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 января 2020

Я полагаю, что самым простым способом было бы преобразовать строку (или что бы пользователь ни вводил, кажется, вы не используете UIDatePicker) в дату и проверить, возможно ли это.

Для середины Европа, летнее время начинается 29 марта 2020 года, поэтому

let df = DateFormatter() 
df.locale = Locale(identifier: "de_DE")
df.timeZone = TimeZone(identifier:"Europe/Berlin")
df.dateFormat="yyyy-MM-dd hh:mm"
if let theDate = df.date(from: "2020-03-29 02:01")
{
    print(theDate)
} else {
  print ("Illegal date")
}

напечатает Недопустимая дата . Немного сложнее переключиться обратно на не-DST, потому что (в Средней Европе) есть две возможные даты для 2020-10-25 02:01 - это может означать зимнее или летнее время с двумя различными представлениями UT C .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...