Если под часовой пояс вы подразумеваете смещение UT C (как используется с датами ISO 8601 со временем), это не проблема. Если под часовым поясом вы подразумеваете истинный часовой пояс с историей c, настоящими и известными смещениями в будущем от UT C, включая, например, летнее время / летнее время, например, Америка / Нью-Йорк или Северо-Американское восточное время, то ISO 8601 не поддерживать это ни для дат с указанием времени дня, ни без него.
2020-04-25-04:00
Это совершенно верно для ISO 8601 от 25 апреля этого года по смещению -04: 00. Таким образом, вы можете использовать его для представления интервала с 2020-04-25T00: 00-04: 00 (включительно) до 2020-04-26T00: 00-04: 00 (эксклюзив). Что будет эквивалентно 2020-04-25T04: 00Z до 2020-04-26T04: 00Z (Z означает UT C).
Java пример кода
Я не знаю не знает никакого Swift, поэтому не может сказать вам, как отформатировать или проанализировать такую строку в Swift. В Java форматировании это неплохо. Пример:
LocalDate date = LocalDate.of(2020, Month.APRIL, 25);
String isoOffsetDateString = date
.atStartOfDay(ZoneId.of("America/New_York"))
.format(DateTimeFormatter.ISO_OFFSET_DATE);
System.out.println(isoOffsetDateString);
Вывод:
2020-04-25-04: 00
Я использую встроенную в Java ISO_OFFSET_DATE
форматировщик. Документация информирует нас, что этот formnatter:
Форматер даты ISO, который форматирует или анализирует дату со смещением, например, '2011-12-03 + 01: 00'.
Анализ строки и создание начала и конца дня занимает немного больше:
TemporalAccessor parsed
= DateTimeFormatter.ISO_OFFSET_DATE.parse(isoOffsetDateString);
Instant start = LocalDate.from(parsed)
.atStartOfDay(ZoneOffset.from(parsed))
.toInstant();
Instant end = start.plus(1, ChronoUnit.DAYS);
System.out.println("From " + start + " inclusive to " + end + " exclusive");
С 2020-04-25T04: 00: 00Z включительно до 2020-04- 26T04: 00: 00Z эксклюзивно
Я решил преобразовать в Instant
класс для момента времени, независимого от смещения или часового пояса. Инстансы печатаются в UT C, как говорит трейлинг Z
на каждом. В своем коде Java вы можете предпочесть не выполнять это преобразование или делать другое преобразование, все в зависимости от обстоятельств.
Ссылка