Техническое задание на создание сайта. Как создать ТЗ самому
Как для постройки дома, так и для создания сайта нужен планВы – умница! Знаете, что для создания сайта, необходимо сделать техническое задание (ТЗ). В этой статье рассматриваем, как сделать ТЗ на создание сайта или портала. В конце статьи вы получите нашу рыбу ТЗ, которую мы постоянно развиваем и улучшаем.
Важный момент, мы говорим о сложных сайтах, а не сайтах, сделанных с помощью сборки на WordPress или других CMS (системах управления сайтом). Мы говорим о порталах, биржах, CRM, онлайн-сервисах и так далее.
Зачем нужно ТЗ на создание сайта?
Если вы задумались построить дом, то имеет смысл нарисовать его план. Портал – это штука не менее сложная, чем дом. Почему же некоторые считают, что крупный сайт можно сделать без технического задания? Просто по обрывкам фраз или “как Youdo.ru”. ТЗ снижает риски, уменьшает бюджет и сроки проекта, улучшает аппетит, снимает бессонницу… Если вы работаете без ТЗ – фундамент вашего проекта строится на болоте.
Скажем так, лучше плохое ТЗ, чем вообще без него. ТЗ – это ваши ожидания относительно процесса и результата создания сайта. Если нет ожиданий, то что вы будете требовать от разработчика в итоге?
Более подробно проблему о необходимости и специфике ТЗ на разработку сайта мы разобрали в другой статье.
Содержание технического задания
Я не буду говорить о ГОСТе и детальных спецификациях по ГОСТу. На мой субъективный взгляд, гораздо важнее в точности описать то, что вам нужно, нежели придерживаться некоторых правил оформления.
Что является самым важным для ТЗ?
Раздел Цели и общее описание проекта. Здесь указываем реальные цели, которых должен добиться исполнитель при выполнении этого ТЗ. Очень кратко, просто для того, чтобы понять, в чем суть проекта.
Раздел Термины и определения. Не нужно забивать его общими понятиями типа “сайт”, “хорошо”, “плохо”. Здесь должны быть термины предметной области (например, “Обналичивание чеков”), с которыми предстоит познакомиться разработчикам, а также специфические термины, которых может не знать заказчик (например, “DNS-зона”). Термины и определения должны встречаться не только в этом разделе, а использоваться в ТЗ! Не создавайте мертвые термины, которые не планируете использовать.
Раздел Общие моменты по взаимодействию. Здесь мы проявляем различные ожидания по взаимодействию. Например, что все, что не описано в ТЗ – это доп (дополнительные работы; доработка, не включенная в ТЗ), который оплачивается отдельно. Заказчик должен сразу это понимать, а не делать изумленный взгляд, когда ему сообщают, что реализовать кабинет Исполнителя в системе – отдельный доп, которого нет в текущем ТЗ.
Раздел Структура сайта и структура данных. Важнейший раздел, где описывается скелет будущего проекта. Прописываем все страницы, карту адресов и краткое описание, что будет на странице. Это по сути задает некоторые границы проекта.
Структура данных описывает основные сущности, связи между сущностями и атрибуты сущностей. Например, сущность Заказ, имеет атрибуты – Стоимость, Товары, Дата заказа и др.
Раздел Требования к страницам. Здесь описываются конкретные требования к каждой странице. Главное слово “конкретные”. Очень опасно писать неконкретику в этом разделе – это порождает споры и недопонимание на этапе сдачи проекта. “Я думал, что это входит”, “а мы поняли это так-то…”.
В нашей практике был случай, когда лет 7 назад в ТЗ была прописана безобидная фраза “Интеграция с 1С”. Такого автора ТЗ можно смело увольнять – при такой постановке задачи заказчик вправе интегрировать все, что угодно из 1С. Нужно конкретно указать какие данные будут передавать из 1С (в одну сторону или в обе). Без этих деталей есть риск возникновения принципиальных разногласий.
Так что же описывать в разделе Требований к страницам? Во-первых, как работают кнопки, что выводится на странице, критерий вывода, ограничения по правам доступа, привести макет страницы (об этом позже), полезно также указать, что не входит в состав страницы для прояснения взаимных ожиданий.
Раздел Общие требования к сайту. Здесь необходимо описать требования к безопасности, верстке, дизайну, SEO, быстродействию, используемым технологиям и другим параметрам. Если вы что-то забыли, то считайте, что этого нет. Не описали требования к поисковой оптимизации – исполнитель сделает, как ему проще. А переделывать всегда сложнее, поэтому лучше сразу заложить требования в ТЗ и реализовать их. В нашей рыбе ТЗ вы найдете эти элементы.
Разделы про Различные процессы. Здесь имеется в виду в первую очередь Регламент внедрения сайта в эксплуатацию. Также сюда можно отнести настройку сервера, процессы приемки этапов. Чем точнее прописаны эти процессы, тем проще будет взаимодействие между заказчиком и исполнителем. Раз прописано и согласовано – значит надо делать. Отсутствие вариативности в этом плане – это хорошо.
Раздел про Требования к заказчику. Да, заказчик тоже должен участвовать в проекте. И надо явно обозначить его роль. Чем точнее эта роль и чем лучше заказчик осознает свои обязанности в проекте, тем больше шансов на успех проекта. Наверно кто-то подумает “вообще обнаглели. Заказчику вешают какие-то обязанности”. Можно и так сказать, но сознательный разработчик-исполнитель должен понимать, что ему не нужна в портфолио мертвая работа. Если заказчик себя плохо проявляет в начале проекта в плане общего менеджмента, то, вероятнее всего, проект быстро загнется, а исполнитель просто потратит время на неперспективный проект.
ТЗ на создание сайта и макеты (прототип)
И последнее, что непременно должно быть в современном ТЗ – это макеты.
Макеты – это схематичное отображение графического интерфейса портала.
Существуют программы, которые позволяют делать интерфейс интерактивным, т.е. кликать по кнопкам, переходить между страницами. Макеты сильно облегчают понимание. Рекомендую делать описание требований после согласования макетов, а не наоборот. Набросали макет, посмотрели в колле по скайпу, скорректировали, утвердили и можно описывать требования уже в текстовом виде.
Вот пожалуй и все, что нужно рассказать про ТЗ на создание сайта с человеческим лицом (не по ГОСТУ).
Так, а где рыба ТЗ? Рыба ТЗ на разработку сайта: https://web-automation.ru/wp-content/uploads/2017/11/ТЗ-Web-Automation.docx. Здесь учтены многие дополнительные нюансы, о которых мы не упомянули. Она составлена в таком плане, чтобы максимально прояснить ожидания по проекту.
Более глубокие знания о разработке ТЗ можно получить на нашем курсе создания технического задания.
P. S. Рекомендуем прочитать статью о стоимости услуг разработки ПО, которая подробно рассматривает вопрос ценообразования программирования и нюансы работы специалиста IT.
Техническое задание для сайта — пример
Начальный этап. Для начала необходимо написать техническое задание или его аналог в свободной форме.
Для это необходимо оформить свои мысли по заданию на сайт в документ и назвать его «Техническое задание на разработку Веб — сайта компании <…..>», далее ТЗ. Строго говоря, этот документ должен регламентировать все отношения с Исполнителем, т.е. содержать требования по дизайну, по навигации, по способам представления информации, по срокам и объемам работ каждого этапа. Это позволяет избежать конфликтов Исполнителя и Заказчика. («Я просил все сделать просто и красиво, а Вы мне тут понаделали и говорите, что это гениально» или, с другой стороны, «Вы говорили, что Вам на сайте надо разместить несколько страничек, а принесли 200 рукописных страниц на другом языке»).
Однако, не все можно описать в Техническом задании, потому что многие идеи по дизайну, навигации и способу представления информации генерирует сам Исполнитель — он же профессионал в Интернет технологиях и в некоторых вещах разбирается лучше всего. Поэтому, окончательный вариант ТЗ вырабатывается уже совместно, но необходимо утвердить и подписать документ до начала конкретных работ по сайту. До того, как Вы выбрали Исполнителя, необходимо подготовить те части ТЗ, которые можно сделать самостоятельно:
Техническое задание на создание сайта
(пример)1. Имя сайта (название домена).
Если домен будет занят, возможна замена имени.
2. Название сайта
.Сайт производственно-торговой фирмы «Торговый дом «. Далее — Торговый дом.
3. Назначение сайта (цель создания сайта).
Представление Торгового дома в Интернет: информация о Торговом доме, о выпускаемой продукции и её технических характеристиках, цены на выпускаемую продукцию и оказываемые услуги, справочная техническая информация, советы покупателю, сопроводительные графические рисунки, юридический адрес, почтовый адрес, схема проезда, контактная информация, банковские реквизиты, сведения об имеющихся вакансиях.
Сайт должен способствовать увеличению притока покупателей при одновременном снижении расходов на рекламу. Сайт должен способствовать привлечению деловых партнеров (грузовые автоперевозки, производители мебельной фурнитуры, производители упаковки для мебели и пр.).
4. Язык сайта.
Русский и английский.
5. Объём и состав текстовой информации
6. Основные ключевые слова, по которым сайт должны находить по запросам в поисковых системах и Интернет — каталогах.
Согласно Приложению 1.
Примечание.
Перечень ключевых слов для веб-дизайнера носит справочный характер (для SEO оптимизазатора важный) и не входит в число обязательных параметров, подлежащих проверке при приемке сайта.
Занимаемые сайтом позиции в рейтингах, каталогах и поисковых системах не оговариваются.
7. Объём и состав графической информации.
Согласно Приложению 2.
8. Объём и состав текстовой и графической информации в электронном виде.
Согласно Приложению 3.
9. Предполагаемая возрастная аудитория сайта.
От 25 лет и старше.
9.1. Предполагаемое возрастное ядро аудитории от 30 до 50 лет.
9.2.
Данная информация носит рекомендательный характер. Цифровые показатели контролю и проверке при приёмке сайта не подлежат.
10. Количество страниц сайта.
Сайт должен содержать следующие html страницы: 1 — Главная (домашняя) страница; 2,3,4,5 — Прайс-лист; 6,7,8,9,10,11,12,13 — Фото (каталог) товаров; 15,16,17,18,19 — Справочная информация; 20 — Уход за мебелью; 21,22 — О фирме; 23,24,25,26 — Офис; 27 — Партнёры; 28 — Вакансии; 29 — Потребности; 30 — Сервисы; 31 — Доставка мебели; 32 — Мебель на заказ.
Количество html страниц сайта определяется веб-дизайнером самостоятельно, исходя из объёма представленных материалов согласно Приложению 3.
11. Кнопки управления (навигация сайта).
Определяются веб-дизайнером самостоятельно.
С каждой страницы сайта должен быть обеспечен переход (установлена гиперссылка) на главную страницу сайта. Сайт должен содержать страницу «Содержание» (карта сайта).
12. Блок схема сайта.
Определяется веб-дизайнером самостоятельно.
Головная (начальная) страница сайта должна содержать гиперссылки, обеспечивающие переход с нее на не менее чем 95% страниц сайта, но не более чем 150 гиперссылок.
13. Объём сайта, Мб.
В зависимости от заказанного хостинга.
14. Оформление рисунков.
Все рисунки объемом более 1 Кб должны быть выполнены с замещающим текстом. Рисунки размером более 15 Кб должны быть выполнены с предпросмотром. Формат всех рисунков gif или jpg (jpeg).
15. Пропускная способность и загрузка страниц.
Среднее время загрузки страниц не должно превышать 5 секунд при скорости соединения _____ Кбит/сек. Допускается увеличение времени загрузки отдельных страниц до 9 секунд, но не более чем на 30% числа страниц сайта. Головная (начальная) страница должна иметь время загрузки не более 5 секунд.
Примечание:
Во всех случаях не учитывается время загрузки подгружаемых элементов (счетчики, баннеры, информеры и т.д.).
16. Основной диапазон разрешения мониторов, на которых будет просматриваться сайт.
От 600х800 до 1240х1024 пикселей (от 15″ ЭЛТ до 19″ ЭЛТ или 17″ LCD).
Основное разрешение, на которое оптимизируется сайт: (19″ ЭЛТ или 17″ LCD, 21″ LCD)
17. Минимальное разрешение монитора, на котором будет просматриваться сайт.
600 х 800 пикселей (15″ ЭЛТ). (Сейчас уже такие мониторы используются только на ноутбуках)
При указанном разрешении должна быть обеспечена возможность просмотра страниц сайта без горизонтальной прокрутки браузера.
18. Основной браузер, которым будет просматриваться сайт, и его минимальная версия.
Google Chrome, Mozilla Firefox, Vivaldi или др.
Основной режим мониторов, на которых будет просматриваться сайт: 15 разрядов цветов и выше (число цветов 65536 и выше).
При разработке сайта должен быть обеспечена возможность его просмотра при использовании безопасной цветовой палитры (разрядность цветов 8). Изменения оттенков цветов, при просмотре сайта с использованием безопасной цветовой палитры, не оговариваются.
20. Общий фон сайта.
Общий фон сайта светлый (белый). Допускается использование светлого фонового рисунка.
21. Размер и вид шрифта сайта.
Размер шрифта сайта должен быть в пределах 12-16 для оформления текста. Размер шрифта для оформления заголовков, названия страниц и т.д. не оговаривается. Вид (название) шрифта не оговаривается.
22. Регистрация сайта в каталогах, рейтингах, топах и пр.
Оговаривается дополнительно.
23. Проведение рекламной кампании по раскрутке сайта.
Продвижение сайта определяется отдельным ТЗ.В настоящем ТЗ продвижения сайта не оговаривается и не входит в состав выполняемых работ (услуг).
24. Срок разработки сайта.
Двадцать пять рабочих дней (оговаривается отдельно) со дня зачисления 50% предоплаты на расчётный счёт веб-студии.
25. Порядок передачи сайта.
Веб-дизайнер передает сайт на запоминающем устройстве (USB Flash ДИСКЕ или выкладывает отдельным фалом в облаке), а также логин, пароль и название (код передачи данных) по протоколу ftp.
Заказчик обязан проверить наличие грамматических и орфографических ошибок на сайте в течение трех рабочих дней. Обнаруженные ошибки веб-дизайнер обязан устранить течение трех рабочих дней.
26. Сопровождение сайта.
Сопровождение сайта определяется отдельным ТЗ.В настоящем ТЗ сопровождение сайта не оговаривается и не входит в состав выполняемых работ (услуг).
27. Дополнительные условия.
Каждая страница сайта должна содержать логотип и название Торгового дома.
Внизу на каждой странице сайта должна быть указана контактная информация.
Сайт должен содержать счетчик подсчета посетителей.
28. Оформление дизайна сайта
(Если имеется корпоративный стиль….. условия. Если нет- обойдите интернет и найдите сайты которые по оформлению и стилю наиболее вам понравились и напишите)
29. Название сайта
(Выберете название сайта с тематическим названием в домене. Пример: если занимаетесь строительством домов то будет так — www.stroim-dom.ru
Приложение
1. Текстовая информация на 20л.
2. Графическая информация на 10л.
3. Текстовая (формат Word) и графическая информация (формат jpeg и gif), представленные в Приложении 1 и 2 на ДИСКЕ.
Примечание
1.Названия и имена вымышленные. Любые совпадения случайны.
2.Задание на сайт может быть изменено с учетом конкретных требований.
3.Задание на сайт предназначено для русскоязычных сайтов, объемом не более …….. html страниц. Если сайт имеет версию на иностранном языке или версию для просмотра на мобильных устройствах, задание на сайт должно быть дополнено соответствующими пунктами.
4.Типовые разрешения мониторов и соотношения сторон:
Для мониторов ЭЛТ 15″ характерны размеры сторон:
600х800 = 480 000 пикселей;
800/600 = 1,333 (соотношение сторон).
·Для мониторов 17″ ЭЛТ и 15″ LCD характерны размеры сторон:
768х1024 = 786 432 пикселей;
1024/768 = 1,333 (соотношение сторон).
·Для мониторов 19″ ЭЛТ и 17″ LCD характерны размеры сторон:
1024х1240 = 1 269 760 пикселей.
1240/1024 = 1,211(соотношение сторон).
·Разрешающая способность монитора 1024х1240 и 600х800 различаются в 2,645 раза.
1 269 760 / 480 000 = 2,645
6. Веб-дизайнер не несет ответственности за несоответствие сайта эстетическим ожиданиям заказчика при условии выполнения технического задания на сайт.
7. При наличии всего контента сайта, техническое задание на сайт можем оперативно согласовать в вашем присутствии. Контент — первооснова для определения того, каким будет сайт: количество html страниц, структура, компоновка, система навигации и т.д.
ХОСТИНГ и аренда СЕРВЕРА
Чек-лист для заказчика. Для составления технического задания на разработку сайта
— Здравствуйте, нам нужен сайт!
— Какой именно сайт Вам нужен?
Современный сайт — это сложная система, которую недостаточно описать устно «парой фраз», или показать «на пальцах», чтобы Заказчик получил именно то, что ему действительно нужно.
Нередко, пожелание «Сделайте нам простую фотогалерею.» превращается в «Переделайте нам фотогалерею, она должна быть совсем другая!». Переделайте — значит дополнительные расходы для Вас. Чтобы Вы их избежали или уменьшили, составлена данная памятка.
Техническое задание на разработку сайта (ТЗ) — это письменное систематизированное и подробное описание того, что Вы хотите получить от разработчика, т. е. как Ваш сайт упорядочен, как выглядит, что умеет делать и как с ним может взаимодействовать посетитель, редактор, оператор или администратор.
Профессору ТЗ не нужно, но он не умеет делать сайты…
ТЗ — это формальный документ, который будет приложен к договору как его неотъемлемая часть, т.е. работы будут исполнены в соответствии с тем, что именно написано в техзадании.
Техническое задание необходимо нам уже на стадии оценки предварительной стоимости проекта, в случае его отсутствия или неполноты, коммерческое предложение может оказаться весьма приблизительным.
Чтобы избежать недопонимания, несбывшихся ожиданий, траты времени и лишних расходов, предлагаем Вам самостоятельно составить хорошее ТЗ, руководствуясь данной памяткой, или заранее заказать у нас услугу профессиональной разработки тех. задания.
Хорошее техническое задание включает в себя:
1. Постановка целей для проекта в целом и его составляющихНапишите, кому именно адресована информация или функционал, расположенные на сайте или конкретной странице.
Например: пол, возраст, род занятий, проблема с которой они пришли на сайт и т.п.
-
Какие задачи должен решать сайт, страница, блок или функция для конкретного адресата?
-
Откуда Вы собираетесь получать трафик на сайт в дальнейшем?
Например: контекстная реклама (Директ, Adwords), поисковая выдача (SEO), соцсети, справочники, карты и т.п.
2. Структура разделов сайта-
Распишите Ваш проект в виде исчерпывающего иерархического списка/дерева разделов, подразделов и страниц.
-
Если структура сложная можно дополнительно использовать графический редактор или инструмент «майнд-мэп» ( https://lifehacker.ru/10-mind-mapping-tools/).
Пример майнд-мэп структуры сайта.
3. Дизайн-
Как визуально должна выглядеть и восприниматься наблюдателем главная и прочие страницы сайта? Подробно опишите в произвольной форме.
-
Укажите допустимые и недопустимые цвета, шрифты, графику.
-
Возможно, у Вас есть готовый фирменный стиль или брендбук? Предоставьте его нам.
-
Укажите ссылками и скриншотами примеры подходящего дизайна с других сайтов. Укажите с примерами «как не надо» и почему.
Подготовьте и передайте нам вместе с тех. заданием все графические материалы, которые Вы хотите использовать на сайте. Если их нет или они не надлежащего качества, Вы можете обратиться к нам.
4. Структура уникальных страниц-
Сделайте в виде приложения к ТЗ визуальный набросок или схему (вайрфрейм, мокап) расположения блоков в настольном и мобильном вариантах, для ключевых и сложных страниц сайта.
Например: Главная, Каталог на всех уровнях, Корзина, Личный кабинет и т.п.
-
Для точности и наглядности можно использовать специальный редактор для прототипирования, например https://moqups.com/, или любой другой графический редактор.
Пример схемы расположения блоков (вайрфрейм).
-
Так же, простую схему расположения блоков можно составить в таблице Excel, объединяя ячейки и столбцы, например вот так: пример в Google-таблице.
Если испытываете сложности с отрисовкой, Вы можете заказать у нас платную услугу прототипирования.
5. Уникальные блоки на страницахПоследовательно распишите текстом для каждой уникальной страницы, какие на них должны быть уникальные блоки с информацией/функционалом и где они должны располагаться.
6. Функционал блоков и страницПоследовательно и подробно распишите функционал для каждой уникальной страницы или уникального блока:
-
Что увидит посетитель?
-
Что может сделать посетитель?
-
Что может сделать редактор/администратор сайта?
-
Что происходит с введенной информацией и загруженными документами?
-
Что происходит автоматически?
-
Нужна ли анимация для отдельных элементов, блоков или страниц? Подробно опишите желаемые эффекты.
Последовательно распишите для каждой страницы:
Например: текст, фото, аудио, видео, файл, формы, и т.п.
Например: простой текстовый блок, таблица, галерея, слайдер, файл для скачивания, форма для загрузки, и т.п.
Заранее подготовьте и передайте нам весь контент в том виде и качестве, в котором он должен быть размещен на сайте. Если контента пока нет, Вы можете обратиться к нам для его разработки.
8. Поведение сайта, страниц, блоков на разных устройствах-
Должен ли сайт быть адаптивным?
-
Укажите устройства и разрешения экрана на которых сайт должен выглядеть определенным образом.
-
Если это важно, опишите как именно должны трансформироваться блоки и контент на страницах при адаптации?
Например: 1С, БЭСТ, Мой склад, Битрикс24 и т.п.
-
Подробно распишите, с привязкой к соответствующим страницам или блокам, как именно должен происходить этот обмен. Какие данные и куда передаются? Что при этом происходит?
Укажите контакты для связи с ответственными техническими специалистами, с которыми мы сможем обсудить интеграцию.
Исходя из данных рекомендаций и структуры Вашего сайта, составьте цельный текстовый документ в виде последовательного изложения с картинками и ссылками, приложив к нему графические наброски, структурные схемы, дизайн-руководства и готовый контент, и отправьте все это на адрес [email protected] или Вашему персональному менеджеру.
ТЗ готово! Разработчик начал делать сайт.
Помните, от качества составления техзадания и его полноты в большой степени зависят реальные сроки разработки и конечная стоимость проекта.
Если Вы испытываете затруднения с составлением хорошего ТЗ или Ваш проект слишком сложен, Вы можете заказать у нас профессиональные услуги по составлению Вашего технического задания, прототипированию внешнего вида сайта или разработке контента.
Техническое задание на разработку сайта, ТЗ на создания сайта
Техническое задание на разработку сайта – это важный документ на базе которого заказчик может оценить качество предоставленного ему проекта по завершению работ. Насколько он соответствует тому, что он ожидал увидеть в результате непосредственно сам заказчик. Простыми словами, ТЗ на создание сайта – это документ, который регламентирует отношения заказчика и исполнителя и имеет в себе все необходимые требования относительно навигации, дизайна сайта, способа подачи информации, объема работы на каждом этапе и сроков. Именно ТЗ на разработку сайта позволяет в итоге избежать конфликтных ситуаций между представителями студии «SEOTopsite» и заказчиком.
Так же этот документ необходим и самому заказчику. Глянув пример ТЗ на разработку сайта заказчику намного проще будет сгруппировать положительные моменты будущего Интернет-ресурса, которые сделают его более эффективным для потенциальных клиентов. Будущий владелец может себе прекрасно понимать что и как должно работать, но для того чтобы это также было прекрасно и на практике, необходимо передать все это словами, заполнив техническое задание на создание сайта, которое вы можете загрузить прямо с нашего сайта. Особенно актуально создание ТЗ сайта в случае, если вы нашли прототип и хотите иметь точно такой же сайт, но с некоторыми корректировками. Здесь важно ваше личное представление о том, как он должен работать.
Конечно же, не все моменты можно учесть, заполняя техническое задание для создания сайта, особенно те идеи, которые касаются навигации, дизайна и способа предоставления информации. В данном случае более эффективна работа исполнителя, который является профессионалом в сфере создания сайтов, поэтому сможет все оформить так, что будет и красиво и удобно. То есть, окончательно техзадания для создания сайта разрабатывается непосредственно в тандеме заказчика и исполнителя. После проработки вашего ТЗ специалистами “SEOTopsite” оно должно быть утверждено и подписано еще до того, как начнутся работы по созданию сайта.
Основные вопросы, которые должны быть затронуты при создании сайта технического задания:
1. Основное назначения WEB-сайта. Вы должны четко знать, какие задачи должен решать ваш проект.
2. Личные пожелания по дизайну. Разработка технического сайта требует, чтобы вы имели собственное представление о стилистике, цветовой гамме и видеографики, что будет предоставлена на сайте.
3. Структура сайта. Алгоритм создания сайта предусматривает, что заранее должны быть известны основные категории и подразделы веб-сайта.
4. Навигация по сайту. Оформляя техзадание на создание сайта, опишите пути перемещения на сайте. Помните, что грамотно проработанная навигация – это залог успеха любого сайта.
5. Администрирование. Если после получения сайта в свое распоряжение вы планируете лично добавлять и менять информацию на нем, необходимо уточнить, каким способом вам удобней это делать, чтобы не возникало противоречий.
6. Контент на страницах. Оформляя техническое задание по разработке сайта необходимо описать станицы сайта, их графическую и текстовую информацию, название, ссылки, которые будут вести на другие сайты и т.д.
7. Общие вопросы. Если вы себе уже представляете, как должен работать ваш сайт, заполняя техническое задание «разработка сайта», опишите сценарий его работы.
Как видите, тех. задание на разработку сайта имеет множество важных моментов, каждый из которых имеет непосредственное отношение к будущей работе сайта, поэтому к вопросу заполнения ТЗ необходимо отнестись с полной отдачей. Конечно же, заполнять тех. задание на создание сайта — это дело личное и решается индивидуально с заказчиком. Но не стоит забывать о документации, которая позволит избежать конфликта по окончанию работ, а специалисты студии “SEOTopsite” в свою очередь гарантируют, что работа будет выполнена в точности с предъявленным ТЗ.
Пример ТЗ на разработку сайта или как снизить цену на разработку!
Привет дорогой читатель! Уделив 10 минут своего времени вы научитесь правильно составлять ТЗ на разработку сайта.
Техническое задание это основной документ для разработки сайта и сегодня на примере я все вам детально покажу.
Для чего писать ТЗ
Задачей ТЗ является передача идеи и сути будущего сайта дизайнерам, программистам и маркетологам. Чтобы не посвящённый человек в суть сайта, после того как ознакомиться с ТЗ сразу понял что от него требуется. Поэтому любое техническое задание начинается с объяснения самого главного – чему сайт посвящён и что от него требуется.
Вот пример:
«Сайт лендинг пейдж, для привлечения новых клиентов и с целью получения прибыли. Сайт посвящен — ремонту окон. Мы работаем напрямую с заводом и наши цены сильно ниже рынка. Основные направления: Замена стеклопакетов, замена уплотнителя, замена и ремонт фурнитуры, ремонт и замена подоконников, откосов, установка отливов, демонтаж оконных конструкций. Наша компания не занимается установкой окон и не проводит ремонтные работы с деревянными окнами. Сайт строгий, понятный пользователю. Для привлечения клиентов будет использоваться контекстная реклама и SEO.»
Исходя из примера вы уже сами знаете что будет за сайт. Не погружаясь в проект известно, что сайт будет посвящён – ремонту окон, но только окон из ПВХ (пластиковых), а не деревянных. Описаны основные направления сайта, что позволяет дизайнеру лучше понять структуру.
Фирменный стиль, логотип, цвета
Все моменты в техническом задании должны быть отображены. Если у вас логотип, фирменный стиль и предпочтения к цветам. Также не забываем показать примеры хорошей реализации сайтов, тех которые нравятся именно вам. Ведь согласитесь, что дизайн это искусство и всегда будет тот кому он понравился и тот кому нет.
Поэтому отталкивайтесь от себя, а это вам пример:
«Мы хотим создать свой фирменный стиль. Цветовую гамму сайта мы видим в темных тонах, а логотип в голубых. Кнопки, цветовые решения для ссылок оставляем на усмотрение дизайнеру. Строгий, без нагромождения. Четкая продуманная структура.»
В 7 случаях из 10 решение лучше принимать дизайнеру и сейчас я объясню почему. У дизайнера есть четкие структуры построения дизайна, а также понимания сочетания цветов и гармонии дизайна. В целом разработанный сайт получается в едином и понятном стиле, а главное не пестрит как новогодняя елка.
Кстати, четь не забыл! Хороший способ это показать, то что вам нравиться. Например пару ссылок на сайты конкурентов или европейские сайты. Не обязательно, чтобы сайты подходили по тематике, ведь в это же будет пример и на разработке сайта все поправят.
«http://site-primer1»
«http://site-primer2»
«http://site-primer3»
Не усердствуйте с примерами. 3-х сайтов вполне хватит понять ваши вкусы профессиональному дизайнеру. Если при разработке сайта будут дополнительные вопросы, то на согласовании этапов они обязательно будут заданы.
Немного о структуре в ТЗ на сайта
В идеальном техническом задании проводят структуру будущего сайта. Например о разделах, подразделах и прочих нюансах.
Лови пример:
1 Компании (страница)
Под страницы:
1.1. О компании
1.2. Контакты
1.3. Блог для SEO статей
1.4. Вакансии
2 Услуги (страница)
Под страницы:
2.1. Замена стеклопакетов
2.2. Замена уплотнителя
2.3. Замена подоконников
2.4. Замена откосов
И так далее. То есть, исходя из этой структуры мы видим, что на странице «Компания» будут вкладки «Под страницы». Тут будет выезжающее меню или ссылки. Думаю это понятно. В случае незнания точной структуры сайта, лучше оставить на усмотрение дизайнерам и программистам.
А вот пример нарисованной схемы:
Также техническое задание лучше дополнить ответами на эти вопросы.
Как снизить цену через ТЗ на сайт
Например наша компания предоставляет скидку на комплексную разработку сайта и не мучает клиентов техническим заданием =) Для Вас мы подготовили специальный Бриф на разработку сайта, ответы на который уже помогут нам сделать все правильно. Также мы в подарок настраиваем контекстную рекламу, а все наши проекты обладают юридической гарантией получения новых клиентов. Напиши нам в 2 клика, а остальное мы сделаем для вас.
Стоимость в 2 клика
как написать ТЗ на разработку сайта, пример, образец
Итак, что именно должно быть в ТЗ, чтобы все друг друга поняли, и все в результате работало. Начнем с того, кто вообще должен составлять техзадание. Делает это исполнитель, руководитель диджитал-агентства с менеджером проекта, при участии будущего владельца сайта.
В идеале сначала клиент встречается еще и с командой аналитиков. Рассказывает, чем он занимается, зачем ему сайт, каким он его представляет, и что в нем должно быть обязательно. Сотрудники диджитал-агентства оценивают продукт, целевую аудиторию, конкурентов и много чего еще, чтобы сделать стартовое предложение и начать его обсуждение, результатом которого и станет техническое задание.
Структура ТЗ для сайта будет разной, в зависимости от того, будет ли это интернет-магазин или корпоративный портал, но общие разделы и правила их оформления неизменны.
Базовая информация о проекте
“Введение” в ТЗ состоит из описания компании заказчика, его продукта, ЦА и ее потребностей, а также поставленных задач. Технические особенности — продолжение первого пункта в виде списка утвержденных технологий и функций. Здесь указывают выбранную CMS или фреймворк и хостинг, а также прописывают требования к адаптивности и кроссбраузерности. Все интеграции, например, с сервисами онлайн-оплаты или 1С тоже размещают тут, чтобы получился базовый чек-лист. Подробнее о разных системах управления контентом и сложности подключения функций заказчику расскажут при подготовке ТЗ.
Структура сайта
Дальше описываются уникальные страницы и сквозные элементы, которые отображаются на каждой из них. Это самый большой и подробный раздел технического задания, начинать который лучше с иерархической модели взаимосвязей между блоками, чтобы визуализировать их. При разработке структуры учитываются поведенческие факторы целевой аудитории, чтобы элементы всех страниц подводили посетителя к нужному действию.
Уникальные страницы — базовые макеты для категорий, карточек товаров и описания услуг, статей в блоге. Каждый шаблон множится в заданном количестве. Например, главная страница будет всего одна, а у каждого товара будет своя карточка. Структура и функции у них будут одинаковые, а содержимое (текстовый и графический контент) — разным. Для каждой уникальной страницы создается макет, показывающий, где будут находиться разные блоки, например, фото товара, его описание, модули для выбора количества и цвета и т.д.
Сквозные элементы описываются каждый отдельно по тому же принципу. Всего их четыре. Шапка сайта или “хедер” — верхняя часть с общим меню, контактной информацией и логотипом компании. Подвал (“футер”) — нижняя, с навигацией по сайту, дублирующая или дополняющая данные из верхней. Для интернет-магазина также используют боковую панель (“сайдбар”) с категориями товаров и фильтрами. Четвертый сквозной элемент — всплывающие окна с формами для подписки, заказа и других действий. Отдельно в техническом задании могут быть страницы для вывода результатов поиска, авторизации и регистрации, а также ошибок.
В современных диджитал-агентствах структуру сайта не просто описывают списком или таблицей, но создают UI/UX макет. Заказчик увидит, где расположены блоки на прототипе и посмотрит, как они работают до того, как утвердить ТЗ. Отдельно на этом этапе прописываются сложные сценарии, например, что должно происходить после того, как посетитель нажмет на кнопку “Заказать”.
Дизайн и контент
Разработка ТЗ для дизайнеров — отдельная часть создания сайта, но иногда их объединяют в одно целое, чтобы показать заказчику все еще нагляднее. Дизайнеры занимаются оформлением утвержденного макета: подбирают цветовую гамму, выбирают шрифты, рисуют иконки и инфографику, обрабатывают фотографии и многое другое, тоже в тесном взаимодействии с будущим владельцем сайта. Все это обычно делается параллельно с front-end разработкой. Хорошо, если у клиента есть брендбук с элементами фирменного стиля, а если нет, то на этапе разработки общего ТЗ определяют базовые особенности — цвета и стиль.
В диджитал-агентстве полного цикла клиентам обязательно предложат помочь с уникальным контентом, от текстового наполнения до съемки видео, но это тоже нужно прописать в ТЗ. Если заказчик хочет заняться этим сам, то важно сразу договориться о том, что сайт будет пустым, максимум с картинками из стока и текстом-рыбой.
Еще 3 совета по составлению технического задания
- Формулируйте четко. Само название “техническое задание” подразумевает точность и однозначность формулировок. Это значит — никаких качественных прилагательных, например, быстрый или удобный, и абстрактных значений там, где могут быть конкретные. Примеры: вместо “быстрая загрузка страниц” — от 80 баллов по оценке сервиса Google PageSpeed Insights или не больше четырех секунд на отображение каждой. Вместо “удобная функция заказать в 1 клик” — картинка всплывающего окна с полем для текста, местом для ввода телефонного номера и соответствующей кнопкой. Это правило касается даже мелочей — сколько картинок будет в одном блоке, какие статьи на блоге будут показываться сверху, где будет расположена плашка “скидка” и т.д.
- Описывайте сущности и функции. Чем подробнее ТЗ — тем лучше. Опишите характеристики для каждого вашего товара, статусы, которые будут указываться в истории заказов, в общем все, что может отображаться на страницах сайта. Программисты объединят это в сущности — объекты с определенными атрибутами и методами, которыми просто управлять. Точно так же поступите и с нестандартными функциями. Если нужно подключение кнопок социальных сетей, интеграция с CRM, отправка уведомлений на e-mail или sms — это должно быть прописано в ТЗ.
- Составьте глоссарий. Клиенты не обязаны знать сложные термины из лексикона разработчиков и дизайнеров, а вот техническое задание должно быть понятно и тем и другим. Конечно, на этапе обсуждения ТЗ, сотрудники диджитал-агентства подробно расскажут, что такое CMS или “футер”, но хорошим тоном считается создать отдельную страницу для заказчика, где он прочтет короткое и понятное описание технологий и функций, использованных в проекте.
Грамотное техническое задание на разработку сайта помогает заказчику и исполнителю лучше понять друг друга и вместе быстрее достичь запланированного результата — запустить красивый, комфортный, функциональный, а точнее соответствующий ТЗ, прибыльный проект.
Техническое задание на создание сайта
Уважаемые посетители моего сайта, прошу помощи в составлении технического задания на создание сайта. Ведь техническое задание намного экономит время разработки. Оно дает понять разработчику, в каком направлении двигаться. В дальнейшем, исходя из задания, составляется прототип будущего сайта, его структура, внешний вид.
Я хотел скачать техзадание на создание сайта в интернете, но там все ТЗ уж очень заумные, и подходят больше для больших проектов. Я представил простого человека, который получит такую анкету 🙂 . 80% пунктов ему просто будет непонятно.
Вот пара пунктов такого технического задания:
Страницы всех разделов сайта должны формироваться программным путем на основании информации из базы данных на сервере.
Все данные сайта должны храниться в структурированном виде под управлением реляционной СУБД. Исключения составляют файлы данных, предназначенные для просмотра и скачивания (изображения, видео, документы и т.п.). Такие файлы сохраняются в файловой системе, а в БД размещаются ссылки на них.
Как вам? Круто? Я сам в шоке 🙂 !!!
Мне нужно составить задание как можно проще, на простом, человеческом языке. Ведь у меня заказывают разработку сайтов в основном частные предприниматели и блоггеры. А им все эти термины как-то по барабану.
Я составил черновик и если у вас есть что добавить, либо изменить в моем техническом задании, пожалуйста, пишите в комментариях!
Техническое задание на создание сайта
Заполните, пожалуйста, анкету, для общего понимания исполнителем, что от него требуется.
Назначение и цели сайта
- Название сайта
- Описание сайта
- Доменное имя сайта (есть или нет, если есть укажите)
- Хостинг (есть, нет)
- Логотип и фавикон (есть или нет)
- Тема сайта
- Аудитория (молодежь, люди среднего возраста, пожилые, покупатели, партнеры)
Структура сайта
- Количество и название страниц
- Первоначальное наполнение. Тексты есть, или нужно заказывать, изображения?
- Карта сайта — на ее основе составляется семантическое ядро. (Здесь нужно указать название рубрик и подрубрик, либо, наоборот, на основе семантического ядра составляется карта сайта)
Дизайн сайта
- Цветовая схема сайта
- Цвет header (шапки сайта)
- Цвет основной зоны контента
- Цвет footer (подвал сайта)
- Отличие внутренних страниц от главной страницы
- Структура внутренних страниц
- Укажите 2-3 сайта, которые вам нравятся
- Укажите 2-3 сайта, которые вам не нравятся
- Шрифты
- Заказываем макет PSD (фотошоп), либо делаем на подобии сайта, который вам нравится
Структура главной страницы
- Расположение логотипа
- Расположение меню
- Количество сайдбаров
- Ссылки на другие внутренние страницы с главной
- Копирайт (текст копирайта и дополнительная информация)
- Нижнее меню и его содержание (опционально)
Структура остальных страниц сайта
- Основные различия разделов сайта от главной страницы
- Структура раздела «Блог», если такой раздел имеет место быть
- Расположение элементов на странице «Контакты» (контактная форма, карта, информация)
- Страница «О нас» Расположение элементов, информация о сотрудниках, или о себе.
- Страница «Услуги» и остальные по аналогии
Функционал сайта, помимо необходимого по умолчанию
- Дополнительные расширения, плагины. Зависит от целей и назначения сайта
- Визуальные эффекты, анимация элементов и прочее
- Нестандартные технические решения, требующие написания дополнительных расширений (скриптов)
СЕО — Оптимизация
- Семантическое ядро сайта (составлено или составлять) — необходимо. Сюда же входит подбор ключевых слов для главной страницы и для разделов.
- Первоначальное продвижение сайта в поисковых системах (укажите, да, нет)
Укажите желаемый срок реализации проекта.
* Примечание: Данное техническое задание не является окончательным. Корректировки вносятся до окончательного утверждения проекта.
Исходя из ваших комментариев я и буду редактировать данный черновик технического задания на создание сайта.
Описание оценка стоимости интеллектуальной собственности здесь.
Лучший способ отблагодарить автора
Похожие по Тегам статьи
POSIX и форматы часовых поясов Олсона — IBM Developer
Введение
Часовой пояс можно указать в двух форматах: POSIX и Olson . Эта статья поможет вам понять форматы часовых поясов Olson и POSIX и поможет вам установить требуемые значения часовых поясов в IBM® AIX®.
Спецификация формата POSIX
Формат часового пояса POSIX является традиционно используемым форматом для систем AIX и обеспечивает небольшое преимущество в производительности по сравнению с форматом часового пояса Олсона.Пример формата POSIX: EST5EDT
.
Преимущество POSIX состоит в том, что вы можете легко и явно указать часовой пояс и детали летнего времени (DST) вручную по своему усмотрению. Производительность приложений, вызывающих функции времени, будет выше, чем при использовании спецификации Олсона. И всякий раз, когда правительство страны решает изменить свои правила перехода на летнее время, формат POSIX проще, потому что мы можем просто изменить определение переменной. Нет необходимости устанавливать какие-либо новые патчи для обновления файлов базы данных времени, как того требует Олсон.
Недостатком этого подхода является то, что он не может отслеживать историю изменений, связанных с часовым поясом, и его нелегко читать, так как он выглядит загадочным. Когда правительство меняет правила и вы обновляете переменную своего часового пояса ( TZ
), предполагается, что это одно и то же правило летнего времени для всех прошлых и будущих лет.
Спецификация формата Olson
Этот метод поддерживает базу данных для каждого часового пояса в каталоге / usr / share / lib / zoneinfo в AIX. Преимущество этого подхода заключается в том, что имя часового пояса легко указать, а Olson ведет историю изменений часового пояса и летнего времени.
В этом формате используются известные названия городов или регионов. Мы можем указать имя часового пояса в простом и понятном формате, например «America / Sao_Paulo»
, вместо того, чтобы указывать более сложный TZ = GRNLNDST3GRNLNDDT, M10.3.0 / 00: 00: 00, M2. 4.0 / 00: 00: 00.
Недостатком этого подхода является то, что Олсону необходимо загрузить файл базы данных для каждого указанного часового пояса, а затем проанализировать его, чтобы найти сведения о часовом поясе и летнем времени. Этот процесс может иметь умеренное снижение производительности по сравнению с форматом POSIX.Кроме того, когда правительство меняет часовой пояс или правило летнего времени, требуется новый патч для файла базы данных времени Olson.
Общие сведения о формате POSIX
Переменная TZ, указанная в формате POSIX, содержит всю информацию, необходимую для определения часового пояса, указания, когда включать и выключать летнее время, и указания смещения от всемирного координированного времени (UTC). Система внутри делает все во времени в формате UTC, и любое отображение времени для пользователей является вычисленным смещением, зависящим от указанного часового пояса и правил DST.
Формат: TZ = local_timezone, дата / время, дата / время.
Здесь дата в формате Mm.n.d
, где:
- мм (1-12) на 12 месяцев
- n (1-5) 1 для первой недели и 5 для последней недели месяца
- d (0-6) 0 для воскресенья и 6 для субботы
Например:
TZ = CST6CDT, M3.2.0 / 2: 00: 00, M11.1.0 / 2: 00: 00
Показать ещеПоказать еще значокЭто повлияет на переход на летнее время в 2:00 утра во второе воскресенье марта и возврат обратно в 2:00 утра в первое воскресенье ноября, и сохранит 6-часовой сдвиг времени от среднего времени по Гринвичу (GMT) каждый раз. год.Разбивка строки:
-
CST6CDT
— название часового пояса . -
CST
— это сокращение, используемое, когда DST составляет , а не . -
6
часов разница во времени с GMT -
CDT
— это сокращение, используемое, когда летнее время составляет на . -
, М3
третий месяц -
. 2
— второе вхождение дня в месяце -
.0
— воскресенье -
/2: 00: 00
время -
, M11
— одиннадцатый месяц -
.1
— первое появление дня в месяце . -
.0
— воскресенье -
/2: 00: 00
время
Настройка летнего времени с использованием часового пояса формата POSIX
Формат времени POSIX можно настроить для переопределения значений летнего времени по умолчанию. Настроенные значения переопределения для DST могут использоваться, когда изменение часового пояса POSIX по умолчанию не ожидается в датах США.
Если опция DST включена, по умолчанию в AIX системное время сдвигается вперед на 1 час (до DST) в 2:00 a.м. во второе воскресенье марта и вернуться на один час (по стандартному времени) в 2:00 утра в первое воскресенье ноября. Однако дату и время перехода на летнее время можно настроить с помощью root (глобальная среда) или пользователями (пользовательская среда), установив переменную среды $ TZ
.
Например, чтобы изменить переход на летнее время с марта на апрель с переходом на летнее время 30 минут, необходимо ввести:
TZ = CET6CEST530, M4.5.0 / 02: 00: 00, M10.5.0 / 03: 00: 00
Показать ещеПоказать еще значокЗдесь разница между 6 и 5:30 рассчитана для летнего времени.
Следующие примеры представляют некоторые из настроенных форматов POSIX:
HAST10HADT, M4.2.0 / 03: 0: 0, M10.2.0 / 03: 0: 00
AST9ADT, M3.2.0, M11.1.0
AST9ADT, M3.2.0 / 03: 0: 0, M11.1.0 / 03: 0: 0
EST5EDT, M3.2.0 / 02: 00: 00, M11.1.0 / 02: 00: 00
GRNLNDST3GRNLNDDT, M10.3.0 / 00: 00: 00, M2.4.0 / 00: 00: 00
EST5EDT, M3.2.0 / 02: 00: 00, M11.1.0
EST5EDT, M3.2.0, M11.1.0 / 02: 00: 00
CST6CDT, M3.2.0 / 2: 00: 00, M11.1.0 / 2: 00: 00
MST7MDT, M3.2.0 / 2: 00: 00, M11.1.0 / 2: 00: 00
PST8PDT, M3.2.0 / 2: 00: 00, M11.1.0 / 2: 00: 00
Показать ещеПоказать еще значокУправление переменной TZ
Переменная среды TZ
используется для представления информации о часовом поясе. Значение TZ
может быть указано в формате POSIX или Olson.
Чтобы установить часовой пояс с использованием значений, определенных Olson, используйте следующий путь к System Management Interface Tool (SMIT):
Системные среды> Изменить / показать дату, время и часовой пояс.
Показать ещеПоказать еще значокЧтобы установить формат Олсона в командной строке, введите:
Если переменная среды TZ
не соответствует правильному значению часового пояса Olson, AIX следует правилам спецификации POSIX.
Чтобы установить формат POSIX в командной строке, введите:
Если задано недопустимое или нераспознанное значение, по умолчанию используется часовой пояс UTC.
Чтобы определить формат часового пояса в командной строке, введите:
.
Вывод команды
zdump
Выходные данные команды zdump
дают четкое представление о времени перехода на летнее время для конкретного часового пояса. Например, на рисунке 1 первые две строки объясняют сценарий, когда летнее время включено, а последние две строки объясняют сценарий, когда оно отключено.
Рисунок 1. Выходные данные команды zdump
Строка 1:
Ожидается, что в воскресенье, 11 марта, ровно после 01:59:59 часы будут переведены на один час вперед.Аббревиатура EST в 01:59:59, а isdst = 0
указывает, что в настоящее время DST составляет , а не . Соответствующее время UTC — 06:59:59.
Строка 2:
Через одну секунду после 01:59:59 время меняется на 03:00:00, DST — на , а сокращение меняется на EDT. isdst = 1
указывает, что летнее время включено. Соответствующее время UTC — 07:00:00.
Строка 3:
Ожидается, что в воскресенье, 4 ноября, ровно после 01:59:59, часы переведутся на один час назад.Аббревиатура EDT в 01:59:59, а isdst = 1
указывает, что в настоящее время DST составляет на . Соответствующее время в формате UTC — 05:59:59.
Строка 4:
Через одну секунду после 01:59:59 время меняется на 01:00:00, летнее время — , — и аббревиатура меняется на EST. isdst = 0
указывает, что летнее время отключено. Соответствующее время UTC — 06:00:00.
Date.prototype.getTimezoneOffset () — JavaScript | MDN
Метод getTimezoneOffset ()
возвращает разницу в минутах между датой, оцененной в часовом поясе UTC, и той же датой, оцененной в местном часовом поясе.
Возвращаемое значение
Разница в минутах между и датой , оцененная в часовом поясе UTC и оцененная в местном часовом поясе.
date.getTimezoneOffset ()
возвращает разницу в минутах между , датой , оцененной в часовом поясе UTC, и датой , датой , оцененной в местном часовом поясе, то есть часовом поясе хост-системы в котором используется браузер (если код запускается из Интернета в браузере), или в противном случае хост-система любой среды выполнения JavaScript (например, Node.js), в котором выполняется код.
Отрицательные значения и положительные значения
Количество минут, возвращаемое функцией getTimezoneOffset ()
, положительно, если местный часовой пояс отстает от UTC, и отрицательно, если местный часовой пояс опережает УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ. Например, для UTC + 10 будет возвращено -600
.
Текущий часовой пояс | UTC-8 | UTC | UTC + 3 |
---|---|---|---|
Возвращаемое значение | 480 | 0 | -180 |
Различные результаты в часовых поясах летнего времени (DST)
В часовом поясе, который ежегодно переключается на летнее время (DST), количество минут, возвращаемых вызовом getTimezoneOffset ()
, может варьироваться.
Рассмотрим данный местный часовой пояс и дату date1 , которые находятся в DST, и рассмотрим минут , количество минут, возвращаемое вызовом date1.getTimezoneOffset ()
; затем:
- Если местный часовой пояс в настоящее время находится в DST, но заданная дата date2 равна , а не в DST, то количество минут, возвращаемое функцией
date2.getTimezoneOffset ()
, равно минут ± 60. - Если местный часовой пояс , а не в настоящее время в DST, но заданная дата date3 находится в DST, то количество минут, возвращаемое
date3.getTimezoneOffset ()
— это минут ± 60.
В часовом поясе, который ежегодно не переключается на летнее время (DST), количество минут, возвращаемое при вызове getTimezoneOffset ()
, всегда возвращает одинаковое количество минут, независимо от экземпляра date он вызван из.
Примечание: Приведенное выше описание является упрощением. В реализациях база данных часовых поясов IANA (tzdata) используется для точного определения влияния перехода на летнее время на вычисление разницы часовых поясов.
пусть currentLocalDate = новая дата ();
let labourDay2016at0324GMTminus2 = new Date ('1 мая 2016 г. 03:24:00 GMT-0200');
currentLocalDate.getTimezoneOffset () === labourDay2016at0324GMTminus2.getTimezoneOffset ();
Таблицы BCD загружаются только в браузере
Инструмент обновления часовых поясов
Введение
Инструмент TZUpdater позволяет обновлять установленное программное обеспечение Java Development Kit (JDK) и Java Runtime Environment (JRE) более свежими данными о часовых поясах, чтобы учесть изменения летнего времени (DST) в разных странах.Oracle полагается на данные о часовых поясах, публично доступные через базу данных часовых поясов IANA.
Oracle рекомендует использовать последнюю версию JDK или JRE для платформы Oracle Java SE в качестве предпочтительного средства доставки обновлений данных о часовых поясах и других улучшений продукта, таких как исправления безопасности. Чтобы узнать, какой выпуск обновления JDK или JRE включает обновленные данные о часовом поясе для вашего региона, см. Раздел Версии данных о часовом поясе в программном обеспечении JRE. Однако, если вы не можете использовать последний выпуск обновления Oracle JDK или JRE или если данные о часовом поясе в последнем выпуске не являются самыми актуальными из доступных, инструмент TZUpdater предоставляет средства обновления данных о часовом поясе, оставляя при этом другую конфигурацию системы и зависимости неизменными. .
Системные требования
Инструмент TZUpdater поддерживает все поддерживаемые в настоящее время версии JDK. До версии 2.3.1 инструмент работал только с двоичными файлами Oracle.
Скачать
Версия инструмента TZUpdater для обновления текущей версии Oracle Java Runtime Enviroment доступна на странице Oracle Technology Network — Java SE Download Page.
Клиенты службы поддержкимогут загрузить инструмент TZUpdater для более старых версий через службу поддержки My Oracle.
Использование
Инструмент TZUpdater изменяет экземпляр программного обеспечения JDK / JRE, который используется для запуска инструмента. Один образ программного обеспечения JDK / JRE изменяется при каждом выполнении. Чтобы администрировать инструмент для нескольких экземпляров программного обеспечения JDK / JRE, см. Раздел «Общесистемное использование».
Вы должны остановить все запущенные экземпляры программного обеспечения JDK / JRE перед запуском инструмента TZUpdater на установленном образе программного обеспечения JDK / JRE.
Запустите инструмент TZUpdater со следующей командой:
java -jar tzupdater.варианты фляги
Для успешного обновления данных часового пояса необходимо убедиться, что у вас достаточно прав для изменения каталога JDK_HOME
/ jre / lib
или JRE_HOME
/ lib
. Если у вас нет достаточных прав для изменения этих каталогов, обратитесь к системному администратору.
Опции
Если вы не укажете никаких параметров, отобразится сообщение об использовании. Чтобы обновить данные часового пояса, используйте параметр -l
или -f
.
Опция | Описание |
---|---|
-h, --help | Распечатайте использование на stdout и выйдите. Если вы укажете этот параметр, другие параметры игнорируются. |
-V, --версия | Распечатайте версию инструмента, версию tzdata в JRE и версию tzdata, до которой обновится инструмент, а затем завершите работу. |
-l, --location url-link-to-archive-file | Скомпилируйте, протестируйте и обновите данные часового пояса JRE из предоставленного пакета tzdata.tar.gz , например -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz . Поддерживаемые протоколы URL: http: //, https: //, file: //. Если URL-ссылка не указана, инструмент будет использовать последний пакет IANA tzdata по адресу https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz . |
-f, -force | Принудительное обновление tzdata. Используйте эту опцию при обновлении до более старой версии tzdata. |
-v, --verbose | Показать подробные сообщения на stdout . |
Обработка ошибок
Инструмент пытается восстановить исходное состояние, когда обнаруживает непредвиденную ошибку, например нехватку места на диске.
Сообщение о проблемах с TZUpdater
Если пользователь желает поднять вопрос против TZUpdater, сообщите об ошибке на http://bugs.java.com.
Обновления инструментов
- 2.3.2 Исправление ошибки
- 2.3.1 Улучшение / исправление ошибки
- JDK-8245950: TZUpdater не может выполнить обновление до tzdata2020a для JDK 7u
- 2.3.0 Улучшения
- JDK-8230554 Поддержка TZUpdater для формата «авангард» (только часть JSR-310)
- JDK-8229818: Добавить обходной путь к TZUpdater для преобразования файлов tzdata из авангарда в арьергард (только JDK 7u).
Использование инструмента TZUpdater для JDK 7u имеет только обходной путь, который включает перевод авангарда в формат арьергарда перед вычислением источников данных javazic.
Новое свойство TZUpdater,
tzupdater.forceUseOfVanguard
, вводится как резервный вариант, если TZUpdater выходит из строя из-за непредвиденных обстоятельств.Новое свойство TZUpdater можно включить, задав:
-Dtzupdater.forceUseOfVanguard = true
2.Версия 3.0 теперь поддерживает авангардный формат tzdata, который не поддерживается с
tzdata2018e
. Ниже приведены соответствующие исправления ошибок: - 2.2.0 Исправление ошибки
- JDK-8194474 (не общедоступно): убрать использование вычислений дайджеста безопасности из tzupdater
Веб-сайт IANA теперь предоставляет функцию https, позволяющую безопасно загружать пакеты ресурсов tzdata.В результате вычисления дайджеста SHA-512 (и размещенные файлы) для загрузки пакетов tzdata больше не требуются.
- JDK-8203908: инструмент TZUpdater не может распечатать информацию о версии для пользователей без записи persmisson
- JDK-8194474 (не общедоступно): убрать использование вычислений дайджеста безопасности из tzupdater
- 2.1.2 Исправление ошибки
Обновлен протокол, используемый для подключения к IANA для загрузки последней информации о часовых поясах, чтобы соответствовать последним изменениям на сайтах IANA.
JDK-8193405 (не общедоступно):
tzupdater.jar --version
не может правильно отображать последнюю версию
- 2.1.1 Исправление ошибки
- 2.1 Улучшения
- 2.0.3 Исправление ошибки
- 2.0.2 Исправление ошибки
- 2.0 Улучшения
- Новая функция TZUpdater: обновление часовых поясов по запросу
Начиная с версии 2.0, опция
"-l"
позволяет пользователю указывать на репозитории IANA и получать инструмент для компиляции последних источников tzdata по запросу.Инструмент также ссылается на веб-сайт ресурсов https для хеш-значений SHA-512, если параметр -l указан с протоколом http или https.
По этой причине в любой среде, которая работает с доступом через прокси, необходимо будет установить значения прокси http и https во время работы инструмента.
HTTP: -Dhttp.proxyHost, -Dhttp.proxyPort HTTPS: -Dhttps.proxyHost, -Dhttps.proxyPort
Если инструмент не может подключиться к указанному ресурсу, будет выдано исключение сокета:
Проблема с сетью при подключении к http-ресурсу. Пожалуйста, ссылайтесь на файл README для tzupdater.
Автоматическая проверка хэша SHA-512 будет выполнена для загруженного пакета tzdata для проверки целостности.Если хеш-значение SHA-512 не соответствует ожиданиям, инструмент завершит работу.
- Новая функция TZUpdater: обновление часовых поясов по запросу
Отмена проверок хэша SHA-512 (не применимо для TZupdater версии 2.2.0 и выше)
Могут возникнуть ситуации, когда доступен новый выпуск tzdata, но Oracle еще не обновил веб-сайт ресурсов https с новым значением хэша SHA-512.
В таких случаях пользователь увидит следующее сообщение об исключении:
Не найден хэш-файл SHA-512: https: // javadl-esd-secure.oracle.com/update/tzupdater/tzdata2014a.tar.gz.sha512. При использовании местоположения ресурса http (s) файл может быть еще недоступен. Ссылка на tzupdater README
В таком случае у пользователя есть возможность использовать протокол file: // с новой опцией -l
, где он может указать свое собственное локальное хеш-значение SHA-512:
- Загрузите копию желаемого пакета
tzdata.tar.gz
в локальный каталог. - Вычислить хэш SHA-512 для этого tar.gz и создайте однострочный файл в том же локальном каталоге, который содержит это хеш-значение SHA-512. К имени файла должно быть добавлено «.sha512» к исходному имени пакета, содержащего правила tzdata.
Например, если вы загрузили
tzdata2014a.tar.gz
в локальный каталог, то файл с именемtzdata2014a.tar.gz.sha512
также должен существовать в том же каталоге и содержать хеш-значение SHA-512. что соответствуетtzdata2014a.tar.gz
файл. - Используйте протокол file: // для применения новых данных часового пояса. Например, если вы загрузили
tzdata2014a.tar.gz
в каталог/ tmp
и создали необходимый файл/tmp/tzdata2014a.tar.gz.sha512
, который содержит однострочное хеш-значение sha512, следующая команда может быть используется для запуска обновления tzdata:java -jar tzupdater.jar -l file: ///tmp/tzdata2014a.tar.gz
(добавьте параметр-v
для подробного вывода)
Известные ограничения
Инструмент имеет несколько ограничений из-за API TimeZone и ограничений реализации.
- Отображаемые имена часовых поясов Этот инструмент не обновляет отображаемые имена часовых поясов, которые являются полностью новыми или имеют изменения, связанные с отображаемыми именами. Для полной поддержки отображаемых имен всех часовых поясов требуется установка последней версии обновления JDK / JRE для платформы Oracle Java SE.
- Использование в масштабах всей системы Вы должны остановить все запущенные экземпляры программного обеспечения JDK / JRE, чтобы работать с ними, прежде чем запускать инструмент TZUpdater на этом установленном образе программного обеспечения JDK / JRE.Системы могут наращивать несколько копий образов программного обеспечения JDK / JRE, поэтому вам может потребоваться применить инструмент индивидуально к каждому образу программного обеспечения JDK / JRE. Расположение нескольких установленных копий программного обеспечения JDK / JRE в производных системах Unix показано ниже. Пользователи Microsoft Windows могут использовать служебную программу поиска на рабочем столе.
- Найти локально установленные экземпляры программного обеспечения JDK / JRE для систем, производных от Unix:
/ usr / bin / find DIRPATH -fstype nfs -prune -o -fstype autofs -prune -o -name java -print -exec {} -version \;
ГдеDIRPATH
— это путь к каталогу для поиска установленных экземпляров платформы Java SE, например/ usr
. - Автоматическое обновление локально установленных экземпляров:
/ usr / bin / find DIRPATH -fstype nfs -prune -o -fstype autofs -prune -o -name java -print -exec {} -jar / ABSOLUTEPATH / tzupdater.jar -l \;
Где
DIRPATH
— это путь к каталогу для поиска установленных экземпляров платформы Java SE, например/ usr
.ABSOLUTEPATH
следует заменить полным путем к каталогу, в котором находитсяtzupdater.jar
расширяется. - Найти локально установленные экземпляры программного обеспечения JDK / JRE для систем, производных от Unix:
umask
в Solaris Инструмент TZUpdater создает файлы с разрешениями по умолчанию. В операционной системе Solaris это взято из umask
. Для запуска инструмента TZudpater следует использовать значение по умолчанию umask
из 022. Более строгий umask
, такой как umask 077
, будет означать, что файлы, созданные инструментом, не могут быть прочитаны другими пользователями.Известные проблемы
tzdata2020a
Известно, что при обработке tzdata2020a существует следующая проблема:
Из-за изменений форматирования в пакете tzdata, поддерживаемом IANA, инструменту TZUpdater не удается выполнить обновление до tzdata2020a для JDK 7u.
Проблема отслеживается по адресу:
Пожалуйста, обратитесь к ошибке для временного решения.
tzdata2018e и более поздние
Начиная с выпуска tzdata 2018e, инструменту TZUpdater необходимо будет использовать заданный формат tzdata, предоставленный IANA.Дополнительную информацию можно найти по телефону:
.Арьергардный формат tzdata предоставляется для совместимости. Сообщения tz-announce содержат ссылки на соответствующие форматы арьергарда, которые следует использовать с инструментом TZUpdater. Используйте параметр -l инструмента, чтобы указать, какой пакет tzdata следует использовать.
Например:
java -jar tzupdater.jar -l https://web.cs.ucla.edu/~eggert/tz/release/2019a/tzdata2019a-rearguard.tar.gz
Информация по установке для конкретной системы
TZUpdater — это чистый инструмент Java, который не решает проблемы управления программным обеспечением, зависящие от платформы.Например, в системе Windows это означает, что дополнительные файлы и файлы резервных копий, созданные инструментом, не будут удалены во время удаления. Чтобы удалить обновленное программное обеспечение JRE, проверьте каталог установки программного обеспечения JRE и удалите его вручную после завершения удаления.
Для систем Solaris, где обновляемое программное обеспечение JRE существует в виде пакета Solaris (например, в экземплярах / usr / j2se
или / usr / jdk /
), это означает, что команда pkgchk
будет выделять изменения. как ошибки или несоответствия.Начиная с версии 1.1.0 TZUpdater, инструмент выполняет дополнительную серию команд управления пакетами, которые при необходимости обновляют базу данных пакетов.
В системе Solaris 10, где существующее программное обеспечение JRE на основе пакетов было обновлено первоначальной версией TZUpdater и были созданы зоны, зоны будут содержать те же ошибки pkgchk
, что и глобальная зона. Во время создания зоны эти ошибки pkgchk
будут выделены в конце команды установки зоны.
Чтобы устранить ошибки базы данных пакетов Solaris, выполните следующие действия. Однако, если вы не работаете в системе Solaris 10 или в вашей системе нет зон, требуется только шаг 1. Если система представляет собой систему Solaris 10 с дополнительными зонами, выполните шаг 1 только в глобальной зоне и выполните шаги 2 и 3.
Запустите текущую версию TZUpdater с опцией
-f force
, чтобы повторно применить обновление часового пояса к ранее обновленному экземпляру программного обеспечения JRE.Произойдет обновление, и будут выполнены дополнительные команды разрешения пакетов. Обновление должно выполняться от имени пользователя root и относится к глобальной зоне только в системе Solaris 10.- Для систем с зонами распакуйте сценарий
pkg_resolve.sh
из файлаtzupdater.jar
/ bin / jar xf tzupdater.jar pkg_resolve.sh
- В зонах, где установлена пакетная установка платформы Java, выполните сценарий.Вы должны запустить сценарий от имени пользователя root:
/ bin / ksh ./pkg_resolve.sh JAVA_PATH
Например:/ bin / ksh ./pkg_resolve.sh /usr/jdk/instances/jdk1.8.0/bin/java
ПРИМЕЧАНИЕ : Обновление системы пакетов удаляет многие файлы из базы данных пакетов и повторно вставляет их, поэтому это может занять до 15 минут.
Удаление изменений в инструменте TZUpdater
Вы должны остановить все запущенные экземпляры программного обеспечения JDK / JRE перед запуском инструмента TZUpdater на установленном образе программного обеспечения JDK / JRE.
В настоящее время нет возможности удалить модификации TZUpdater. Выполнив следующие шаги, вы можете вручную удалить модификации, сделанные текущим инструментом TZUpdater.
Для JDK 7 и более ранних версий семейства:
- Найдите каталог
zi
в измененном каталоге JAVAHOME / jre / lib. Это более новый файл данных. - Найдите каталог
'zi.tzdata *'
в том же каталоге JAVAHOME / jre / lib.Это замененные старые данные. - Получите текущую установленную версию данных часового пояса с помощью команды
java -jar tzupdater.jar -V
. - Переименуйте текущий каталог «
zi
» во что-то вроде«zi.tzdata2016b»
или любую другую версию, указанную командой на шаге 3. Убедитесь, что это не конфликтует со старым каталогом данных. - Переименуйте старый каталог данных в
'zi'
. - Подтвердите изменение данных текущего активного часового пояса, выполнив
java -jar tzupdater.банка -V
. - При необходимости перезапустите приложения на этом экземпляре JDK / JRE.
Для JDK 8 и более поздних версий семейства:
- Найдите файл
'tzdb.dat'
в измененном каталоге JAVAHOME / jre / lib. Это более новый файл данных. - Найдите
'tzdb.dat.
; файл в том же каталоге JAVAHOME / jre / lib. Это замененный старый файл данных.' - Получите текущую установленную версию данных часового пояса с помощью команды
java -jar tzupdater.банка -V
. - Переименуйте текущий файл
'tzdb.dat'
во что-то вроде'tzdb.dat.
или любую другую версию, указанную командой на шаге 3. Убедитесь, что это имя не конфликтует со старыми файлами данных. .' - Переименуйте старый файл данных в
'tzdb.dat'
. - Подтвердите изменение данных текущего активного часового пояса, выполнив
java -jar tzupdater.jar -V
. - При необходимости перезапустите приложения на этом экземпляре JDK / JRE.
Для получения дополнительной информации
Следующие ссылки указывают на предоставленную Oracle Corporation информацию об изменениях часовых поясов и летнего времени и о том, как они влияют на платформу Java и другие продукты Oracle:
Следующие внешние ссылки предоставляют общую информацию о часовых поясах и DST:
Определения часовых поясов мирадля Python — документация pytz 2014.10
Введение
pytz переносит базу данных Olson tz в Python.Эта библиотека позволяет
точные и кросс-платформенные расчеты часовых поясов с использованием Python 2.4
или выше. Это также решает проблему неоднозначного времени в конце
летнего времени, о котором вы можете узнать больше в Python
Справочник по библиотеке ( datetime.tzinfo
).
Поддерживаются почти все часовые пояса Олсона.
Примечание
Эта библиотека отличается от документированного API Python для
реализации tzinfo; если вы хотите создать локальные настенные часы
раз вам нужно использовать метод localize ()
, описанный в этом
документ.Кроме того, если вы выполняете арифметику даты на локальном
раз, которые пересекают границы летнего времени, результат может быть неверным
часовой пояс (т.е. вычтите 1 минуту из 1:00 EST 2002-10-27, и вы получите
2002-10-27 0:59 EST вместо правильного 2002-10-27 1:59 EDT). А normalize ()
метод предназначен для исправления этого. К сожалению, эти
проблемы не могут быть решены без изменения даты и времени Python
реализация (см. PEP-431).
Установка
Этот пакет можно установить из файла.файл яйца с помощью setuptools, или из архива с помощью стандартных дистрибутивов Python.
Если вы устанавливаете из архива, выполните следующую команду как административный пользователь:
Если вы устанавливаете с помощью setuptools, вам даже не нужно загружать что угодно, так как последняя версия будет загружена для вас из индекса пакета Python:
easy_install --upgrade pytz
Если у вас уже есть файл .egg, вы также можете использовать его:
easy_install pytz-2008g-py2.6. яйцо
Пример и использование
Локализованное время и арифметика даты
>>> from datetime import datetime, timedelta >>> из часового пояса импорта pytz >>> импорт pytz >>> utc = pytz.utc >>> utc.zone 'УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ' >>> восточный = часовой пояс ('США / Восток') >>> Eastern.zone "США / Восток" >>> Амстердам = часовой пояс ('Европа / Амстердам') >>> fmt = '% Y-% m-% d% H:% M:% S% Z% z'
Эта библиотека поддерживает только два способа построения локализованного времени.В
во-первых, использовать метод localize ()
, предоставляемый библиотекой pytz.
Это используется для локализации наивного datetime (datetime без часового пояса
информация):
>>> loc_dt = Eastern.localize (datetime (2002, 10, 27, 6, 0, 0)) >>> печать (loc_dt.strftime (fmt)) 2002-10-27 06:00:00 EST-0500
Второй способ построения локализованного времени — преобразование существующего
локализованное время с использованием стандартного метода astimezone ()
:
>>> ams_dt = loc_dt.astimezone (амстердам) >>> ams_dt.strftime (fmt) '2002-10-27 12:00:00 CET + 0100'
К сожалению, используя аргумент tzinfo стандартного datetime конструкторы » не работают » с pytz для многих часовых поясов.
>>> datetime (2002, 10, 27, 12, 0, 0, tzinfo = амстердам) .strftime (fmt) '2002-10-27 12:00:00 LMT + 0020'
Это безопасно для часовых поясов без перехода на летнее время, например как UTC:
>>> datetime (2002, 10, 27, 12, 0, 0, tzinfo = pytz.utc) .strftime (fmt) '2002-10-27 12:00:00 UTC + 0000'
Предпочтительный способ работы со временем — всегда работать в формате UTC, преобразование в местное время только при генерации вывода для чтения людьми.
>>> utc_dt = datetime (2002, 10, 27, 6, 0, 0, tzinfo = utc) >>> loc_dt = utc_dt.astimezone (восточный) >>> loc_dt.strftime (fmt) '2002-10-27 01:00:00 EST-0500'
Эта библиотека также позволяет выполнять арифметические операции с датами, используя локальные
раз, хотя это сложнее, чем работать в UTC, поскольку вы
необходимо использовать метод normalize ()
для перехода на летнее время
и другие переходы часовых поясов.В этом примере установлен loc_dt
к моменту окончания летнего времени в США / Восточном
часовой пояс.
>>> before = loc_dt - timedelta (минут = 10) >>> before.strftime (fmt) '2002-10-27 00:50:00 EST-0500' >>> Eastern.normalize (до) .strftime (fmt) '2002-10-27 01:50:00 EDT-0400' >>> after = Eastern.normalize (до + timedelta (минут = 20)) >>> after.strftime (fmt) '2002-10-27 01:10:00 EST-0500'
Установить местное время тоже непросто, и причина, по которой работать с
местное время не рекомендуется.К сожалению, нельзя просто пройти
аргумент tzinfo
при построении даты и времени (см. следующий
раздел для более подробной информации)
>>> dt = datetime (2002, 10, 27, 1, 30, 0) >>> dt1 = Eastern.localize (dt, is_dst = True) >>> dt1.strftime (fmt) '2002-10-27 01:30:00 EDT-0400' >>> dt2 = Eastern.localize (dt, is_dst = False) >>> dt2.strftime (fmt) '2002-10-27 01:30:00 EST-0500'
Преобразование между часовыми поясами проще выполнить с помощью стандартный метод astimezone.
>>> utc_dt = utc.localize (datetime.utcfromtimestamp (1143408899)) >>> utc_dt.strftime (fmt) '2006-03-26 21:34:59 UTC + 0000' >>> au_tz = часовой пояс ('Австралия / Сидней') >>> au_dt = utc_dt.astimezone (au_tz) >>> au_dt.strftime (fmt) '2006-03-27 08:34:59 AEDT + 1100' >>> utc_dt2 = au_dt.astimezone (utc) >>> utc_dt2.strftime (fmt) '2006-03-26 21:34:59 UTC + 0000' >>> utc_dt == utc_dt2 Правда
Вы можете использовать ярлыки при работе со стороной часового пояса UTC.
конверсии. normalize ()
и localize ()
не совсем
необходимо, когда нет перехода на летнее время
иметь дело с.
>>> utc_dt = datetime.utcfromtimestamp (1143408899) .replace (tzinfo = utc) >>> utc_dt.strftime (fmt) '2006-03-26 21:34:59 UTC + 0000' >>> au_tz = часовой пояс ('Австралия / Сидней') >>> au_dt = au_tz.normalize (utc_dt.astimezone (au_tz)) >>> au_dt.strftime (fmt) '2006-03-27 08:34:59 AEDT + 1100' >>> utc_dt2 = au_dt.astimezone (utc) >>> utc_dt2.strftime (fmt) '2006-03-26 21:34:59 UTC + 0000'
tzinfo
API Экземпляры tzinfo
, возвращаемые функцией timezone ()
, имеют
был расширен, чтобы справиться с неоднозначным временем, добавив is_dst
в методы utcoffset ()
, dst ()
&& tzname ()
.
>>> tz = часовой пояс ('America / St_Johns')
>>> нормальный = datetime (2009, 9, 1) >>> неоднозначно = datetime (2009, 10, 31, 23, 30)
Параметр is_dst
игнорируется для большинства временных меток.Это только используется
во время перехода на летнее время возникают неоднозначные периоды, чтобы разрешить эту неоднозначность.
>>> tz.utcoffset (нормальный, is_dst = True) datetime.timedelta (-1, 77400) >>> tz.dst (нормально, is_dst = True) datetime.timedelta (0, 3600) >>> tz.tzname (нормально, is_dst = True) 'NDT'
>>> tz.utcoffset (неоднозначно, is_dst = True) datetime.timedelta (-1, 77400) >>> tz.dst (неоднозначно, is_dst = True) datetime.timedelta (0, 3600) >>> tz.tzname (неоднозначно, is_dst = True) 'NDT'
>>> tz.utcoffset (нормальный, is_dst = False) datetime.timedelta (-1, 77400) >>> tz.dst (нормально, is_dst = False) datetime.timedelta (0, 3600) >>> tz.tzname (нормально, is_dst = Ложь) 'NDT'
>>> tz.utcoffset (неоднозначно, is_dst = False) datetime.timedelta (-1, 73800) >>> tz.dst (неоднозначно, is_dst = False) datetime.timedelta (0) >>> tz.tzname (неоднозначно, is_dst = False) "NST"
Если is_dst
не указано, будут возникать неоднозначные временные метки. pytz.exceptions.AmbiguousTimeError
исключение.
>>> tz.utcoffset (нормальный) datetime.timedelta (-1, 77400) >>> tz.dst (нормальный) datetime.timedelta (0, 3600) >>> tz.tzname (нормальный) 'NDT'
>>> import pytz.exceptions >>> попробуйте: ... tz.utcoffset (неоднозначно) ... кроме pytz.exceptions.AmbiguousTimeError: ... print ('pytz.exceptions.AmbiguousTimeError:% s'% неоднозначно) pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00 >>> попробуйте: ... tz.dst (неоднозначно) ... кроме pytz.exceptions.AmbiguousTimeError: ... print ('pytz.exceptions.AmbiguousTimeError:% s'% неоднозначно) pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00 >>> попробуйте: ... tz.tzname (неоднозначно) ... кроме pytz.exceptions.AmbiguousTimeError: ... print ('pytz.exceptions.AmbiguousTimeError:% s'% неоднозначно) pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
Проблемы с Localtime
Основная проблема, с которой нам приходится иметь дело, заключается в том, что определенные даты и время может происходить дважды в год.Например, в американском / восточном часовом поясе в последнее воскресенье октября утром следующая последовательность бывает:
- 01:00 EDT происходит
- Спустя 1 час, вместо 2:00 часы переводятся на 1 час назад и снова 01:00 (на этот раз 01:00 EST)
Фактически, каждое мгновение между 01:00 и 02:00 происходит дважды. Это означает что если вы попытаетесь установить время в часовом поясе «США / Восток» стандартный синтаксис datetime, невозможно указать, имели ли вы в виду до или после перехода на летнее время.С помощью Пользовательский синтаксис pytz, лучшее, что вы можете сделать, это сделать обоснованное предположение:
>>> loc_dt = Eastern.localize (datetime (2002, 10, 27, 1, 30, 00)) >>> loc_dt.strftime (fmt) '2002-10-27 01:30:00 EST-0500'
Как видите, система выбрала для вас один и есть 50% шанс того, что он исчезнет через час. Для некоторых приложений это не важно. Однако, если вы пытаетесь назначить встречи с людьми в разных часовых поясах или анализировать файлы журналов это не приемлемо.
Лучшее и простое решение — использовать UTC. Питц пакет рекомендует использовать UTC для представления внутреннего часового пояса включая специальную реализацию UTC, основанную на стандартном Python эталонная реализация в документации Python.
Часовой пояс UTC становится одним и тем же, а затем выбирается размер меньше, чем у других экземпляров pytz tzinfo. Реализация UTC можно получить как pytz.utc, pytz.UTC или pytz.timezone («UTC»).
>>> импортный рассол, питз >>> dt = datetime (2005, 3, 1, 14, 13, 21, tzinfo = utc) >>> наивный = дт.заменить (tzinfo = Нет) >>> p = pickle.dumps (dt, 1) >>> naive_p = pickle.dumps (наивный, 1) >>> len (p) - len (naive_p) 17 >>> новый = pickle.loads (p) >>> новый == dt Правда >>> новое это dt Ложь >>> new.tzinfo - это dt.tzinfo Правда >>> pytz.utc - это pytz.UTC - это pytz.timezone ('UTC') Правда
Обратите внимание, что некоторые другие часовые пояса обычно считаются такими же (GMT, Гринвич, Универсал и др.). Определение UTC отличается от этих другие часовые пояса, и они не эквивалентны.По этой причине они будут не сравнивайте то же самое в Python.
>>> utc == pytz.timezone ('GMT') Ложь
См. Раздел «Что такое UTC» ниже.
Если вы настаиваете на работе с местным временем, эта библиотека предоставляет объект для их строительства однозначно:
>>> loc_dt = datetime (2002, 10, 27, 1, 30, 00) >>> est_dt = Eastern.localize (loc_dt, is_dst = True) >>> edt_dt = Eastern.localize (loc_dt, is_dst = False) >>> print (est_dt.strftime (fmt) + '/' + edt_dt.strftime (fmt)) 2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500
Если вы передадите None в качестве флага is_dst для localize (), pytz откажется угадывать и вызывать исключения, если вы пытаетесь построить неоднозначные или несуществующие раз.
Например, 1:30 утра 27 октября 2002 г. произошло дважды в США / Восточной Европе. часовой пояс, когда часы возвращаются в конце перехода на летнее время Время:
>>> dt = datetime (2002, 10, 27, 1, 30, 00) >>> попробуйте: ... Eastern.localize (dt, is_dst = None) ... кроме pytz.exceptions.AmbiguousTimeError: ... print ('pytz.exceptions.AmbiguousTimeError:% s'% dt) pytz.exceptions.AmbiguousTimeError: 2002-10-27 01:30:00
Аналогичным образом, 2:30 утра 7 апреля 2002 г. вообще не происходило в Часовой пояс США / Восточный, поскольку часы, переведенные в 2:00 утра, пропускаются весь час:
>>> dt = datetime (2002, 4, 7, 2, 30, 00) >>> попробуйте: ... Eastern.localize (dt, is_dst = None) ... кроме pytz.exceptions.NonExistentTimeError: ... print ('pytz.exceptions.NonExistentTimeError:% s'% dt) pytz.exceptions.NonExistentTimeError: 2002-04-07 02:30:00
Оба эти исключения имеют общий базовый класс для обработки ошибок. проще:
>>> isinstance (pytz.AmbiguousTimeError (), pytz.InvalidTimeError) Правда >>> isinstance (pytz.NonExistentTimeError (), pytz.InvalidTimeError) Правда
Особый случай, когда страны меняют определения часовых поясов. без переключателя летнего времени.Например, в 1915 г. Варшава перешел с варшавского времени на центральноевропейское без перехода на летнее время переход. Итак, ровно в полночь 5 августа 1915 года часы были перенесены на 24 минуты назад, создавая неоднозначный период времени, который не может указывать без ссылки на аббревиатуру часового пояса или фактическое смещение UTC. В этом случае полночь случилась дважды, ни разу в период летнего времени. pytz обрабатывает этот переход с помощью обработка неоднозначного периода до перехода на летнее время время и неопределенный период после стандартного времени.
>>> warsaw = pytz.timezone ('Европа / Варшава') >>> amb_dt1 = warsaw.localize (datetime (1915, 8, 4, 23, 59, 59), is_dst = True) >>> amb_dt1.strftime (fmt) '1915-08-04 23:59:59 WMT + 0124' >>> amb_dt2 = warsaw.localize (datetime (1915, 8, 4, 23, 59, 59), is_dst = False) >>> amb_dt2.strftime (fmt) '1915-08-04 23:59:59 CET + 0100' >>> switch_dt = warsaw.localize (datetime (1915, 8, 5, 00, 00, 00), is_dst = False) >>> switch_dt.strftime (fmt) '1915-08-05 00:00:00 CET + 0100' >>> str (switch_dt - amb_dt1) '0:24:01' >>> str (switch_dt - amb_dt2) '0:00:01'
Лучший способ создать время в неоднозначном временном периоде — это путем преобразования из другого часового пояса, например UTC:
>>> utc_dt = datetime (1915, 8, 4, 22, 36, tzinfo = pytz.универсальное глобальное время) >>> utc_dt.astimezone (варшава) .strftime (fmt) '1915-08-04 23:36:00 CET + 0100'
Стандартный способ обработки всех этих неоднозначностей в Python — не обрабатывать их, как показано в этом примере, используя US / Eastern определение часового пояса из документации Python (обратите внимание, что это реализация работает только для дат между 1987 и 2006 годами — это включены только для тестов!):
>>> from pytz.reference import Eastern # pytz.reference только для тестов >>> dt = datetime (2002, 10, 27, 0, 30, tzinfo = восточный) >>> str (dt) '2002-10-27 00: 30: 00-04: 00' >>> str (dt + timedelta (часы = 1)) '2002-10-27 01: 30: 00-05: 00' >>> str (dt + timedelta (часы = 2)) '2002-10-27 02: 30: 00-05: 00' >>> str (dt + timedelta (часы = 3)) '2002-10-27 03: 30: 00-05: 00'
Заметили первые два результата? На первый взгляд может показаться, что они правильно, но принимая во внимание смещение UTC, вы обнаруживаете, что они на самом деле два часа квартиры вместо 1 часа, который мы просили.
>>> из pytz.reference import UTC # pytz.reference только для тестов >>> str (dt.astimezone (UTC)) '2002-10-27 04: 30: 00 + 00: 00' >>> str ((dt + timedelta (часы = 1)). astimezone (UTC)) '2002-10-27 06: 30: 00 + 00: 00'
Информация о стране
Предоставляется механизм доступа к часто используемым часовым поясам.
для конкретной страны поиск по коду страны ISO 3166.
Он возвращает список строк, которые можно использовать для получения соответствующих
tzinfo с использованием pytz.часовой пояс ()
:
>>> print ('' .join (pytz.country_timezones ['nz'])) Тихий океан / Окленд Тихий океан / Чатем
База данных Olson содержит код страны ISO 3166 для английского языка. отображение имен, которое pytz предоставляет в виде словаря:
>>> print (pytz.country_names ['nz']) Новая Зеландия
Что такое UTC
«UTC» — всемирное координированное время. Это преемник, но отличный от, среднее время по Гринвичу (GMT) и различные определения универсального Время.UTC теперь является мировым стандартом для регулирования часов и времени. измерение.
Все остальные часовые пояса определены относительно UTC и включают смещения, например UTC + 0800 — часы, которые нужно добавить или вычесть из UTC для получения местного времени. Нет летнее время происходит в формате UTC, что делает его удобным часовым поясом для выполнения арифметика даты, не беспокоясь о путанице и двусмысленности, вызванной при переходе на летнее время, изменении часового пояса в вашей стране или мобильные компьютеры, перемещающиеся в разных часовых поясах.
Помощники
Имеется два списка часовых поясов.
all_timezones
— это исчерпывающий список имен часовых поясов, которые могут
использоваться.
>>> из pytz import all_timezones >>> len (all_timezones)> = 500 Правда >>> 'Etc / Greenwich' во всех_ часовых поясах Правда
common_timezones
— это список полезных текущих часовых поясов. Это не
содержат устаревшие зоны или исторические зоны, за исключением некоторых,
считается широко используемым, например, США / Восток (откройте отчет об ошибке, если вы
думаю, что другие часовые пояса заслуживают включения здесь).Это также
последовательность строк.
>>> из pytz import common_timezones >>> len (common_timezones)>> 'Etc / Greenwich' в common_timezones Ложь >>> 'Австралия / Мельбурн' в common_timezones Правда >>> 'US / Eastern' в common_timezones Правда >>> 'Canada / Eastern' в common_timezones Правда >>> 'US / Pacific-New' во всех_ часовых поясах Правда >>> 'US / Pacific-New' в common_timezones Ложь
common_timezones
и all_timezones
расположены в алфавитном порядке.
отсортировано:
>>> common_timezones_dupe = common_timezones [:] >>> common_timezones_dupe.Сортировать() >>> common_timezones == common_timezones_dupe Правда >>> all_timezones_dupe = all_timezones [:] >>> all_timezones_dupe.sort () >>> all_timezones == all_timezones_dupe Правда
all_timezones
и common_timezones
также доступны в виде наборов.
>>> из pytz импортировать all_timezones_set, common_timezones_set >>> "США / Восток" в all_timezones_set Правда >>> 'US / Eastern' в common_timezones_set Правда >>> 'Австралия / Виктория' в common_timezones_set Ложь
Вы также можете получить списки часовых поясов, используемых в определенных странах.
используя функцию country_timezones ()
.Требуется ISO-3166
двухбуквенный код страны.
>>> из pytz import country_timezones >>> print ('' .join (country_timezones ('ch'))) Европа / Цюрих >>> print ('' .join (country_timezones ('CH'))) Европа / Цюрих
Интернационализация — i18n / l10n
Pytz — это интерфейс к базе данных IANA, использующий имена ASCII. Локали Unicode Консорциума Unicode (CLDR) проект предоставляет переводы. Thomas Khyn’s l18n может использоваться для доступа к эти переводы с Python.
Лицензия
Лицензия MIT.
Этот код также доступен как часть Zope 3 в рамках Zope Public. Лицензия, версия 2.1 (ZPL).
Я буду рад перелицензировать этот код, если необходимо, для включения в другие проекты с открытым исходным кодом.
Последние версии
Этот пакет будет обновлен после выпусков часового пояса Олсона. база данных. Последнюю версию можно загрузить из пакета Python. Показатель. Используемый код для создания этого дистрибутива размещается на панели запуска.чистый и доступный используя git:
git clone https://git.launchpad.net/pytz
Зеркало на github также доступно по адресу https://github.com/stub42/pytz
Анонсы новых релизов производятся на Launchpad и Подача атома размещен там.
Ошибки, запросы функций и исправления
Об ошибках можно сообщить с помощью Launchpad.
Проблемы и ограничения
- Смещения от UTC округляются до ближайшей целой минуты, поэтому часовые пояса такие как Европа / Амстердам до 1937 года, будет до 30 секунд.Этот является ограничением библиотеки Python datetime.
- Если вы считаете, что определение часового пояса неверно, я, вероятно, не смогу исправить Это. pytz — это прямой перевод базы данных часовых поясов Olson, и в этот источник необходимо внести изменения в определения часовых поясов. Если вы обнаружите ошибки, о них следует сообщить в рассылку о часовых поясах. список, ссылка на который есть на http://www.iana.org/time-zones.
часовых поясов — документация по воздушному потоку
Поддержка часовых поясов включена по умолчанию.Airflow хранит информацию о дате и времени в формате UTC внутри себя и в базе данных. Это позволяет запускать группы DAG с расписаниями, зависящими от часового пояса. На данный момент Airflow не конвертирует их в часовой пояс конечного пользователя в пользовательском интерфейсе. Там он всегда будет отображаться в формате UTC. Также шаблоны, используемые в Операторах не конвертируются. Информация о часовом поясе раскрывается, и автор группы DAG должен решать, что с ней делать.
Это удобно, если ваши пользователи живут в более чем одном часовом поясе и вы хотите отображать информацию о дате и времени в соответствии с настенные часы каждого пользователя.
Даже если вы используете Airflow только в одном часовом поясе, рекомендуется хранить данные в формате UTC в своей базе данных. (также до того, как Airflow узнал о часовом поясе, это также была рекомендуемая или даже обязательная настройка). Основная причина — что во многих странах используется летнее время (DST), когда часы переводятся вперед весной и назад осенью. Если вы работаете по местному времени, вы, вероятно, будете сталкиваться с ошибками дважды в год, когда переходы случаться. (В документации по маятнику и pytz эти вопросы обсуждаются более подробно.) Это, наверное, не имеет значения для простого DAG, но это проблема, если вы, например, работаете в финансовых службах, где у вас есть сроки соблюсти.
Часовой пояс устанавливается в airflow.cfg
. По умолчанию установлено значение utc, но вы можете изменить его, чтобы использовать настройки системы или
произвольный часовой пояс IANA, например Европа / Амстердам
. Он зависит от маятника
, который более точен, чем pytz
.
Маятник устанавливается при установке Airflow.
Веб-интерфейс
По умолчанию веб-интерфейс отображает время в формате UTC. Можно изменить отображаемый часовой пояс, используя меню в правом верхнем углу (нажмите на часы, чтобы активировать его):
«Local» определяется по часовому поясу браузера. Значение «Сервер» берется из параметра default_timezone
в разделе [core]
.
Часовой пояс, выбранный пользователем, сохраняется в LocalStorage, так что это настройка для каждого браузера.
Примечание
Если вы настроили установку Airflow для использования другого часового пояса по умолчанию и хотите, чтобы пользовательский интерфейс использовал этот же часовой пояс, установите default_ui_timezone
в разделе [веб-сервер]
либо на пустую строку, либо на то же значение.
(в настоящее время по умолчанию используется время в формате UTC, чтобы поддерживать согласованное поведение пользовательского интерфейса по умолчанию между точечными выпусками.)
Концепции
Наивные и осведомленные объекты datetime
Объекты Pythondatetime.datetime имеют атрибут tzinfo, который можно использовать для хранения информации о часовом поясе, представлен как экземпляр подкласса datetime.tzinfo. Если этот атрибут установлен и описывает смещение, объект datetime осведомлен. В противном случае это наивно.
Вы можете использовать часовой пояс .is_localized ()
и timezone.is_naive ()
, чтобы определить, известно ли datetime или нет.
, потому что Airflow использует объекты datetime с учетом часовых поясов. Если ваш код создает объекты datetime, им тоже нужно об этом знать.
из часового пояса импорта airflow.utils now = timezone.utcnow () a_date = timezone.datetime (2017, 1, 1)
Интерпретация наивных объектов datetime
Хотя Airflow полностью учитывает часовой пояс, он по-прежнему принимает наивные объекты даты и времени для start_dates
и end_dates
в определениях DAG.Это в основном для того, чтобы сохранить обратную совместимость. В
если встречается наивный start_date
или end_date
, применяется часовой пояс по умолчанию. Применяется
таким образом, что предполагается, что наивное время даты уже находится в часовом поясе по умолчанию. В других
слов, если у вас установлен часовой пояс по умолчанию Европа / Амстердам
и создайте наивную дату и время start_date
из datetime (2017,1,1)
предполагается, что это start_date
от 1 января 2017 года по амстердамскому времени.
default_args = dict (start_date = datetime (2016, 1, 1), owner = "airflow") dag = DAG ("my_dag", default_args = default_args) op = DummyOperator (task_id = "dummy", dag = dag) print (op.owner) # Воздушный поток
К сожалению, во время перехода на летнее время некоторые даты не существуют или являются неоднозначными. В таких ситуациях маятник вызывает исключение. Вот почему вы всегда должны создавать осознанные объекты datetime, когда включена поддержка часового пояса.
На практике это редко является проблемой. Airflow предоставляет вам объекты datetime с учетом часовых поясов в моделях и DAG, и чаще всего
новые объекты datetime создаются из существующих с помощью арифметики timedelta.Единственное время, которое часто бывает
созданное в коде приложения текущее время, и timezone.utcnow ()
автоматически делает правильные вещи.
Часовой пояс по умолчанию
Часовой пояс по умолчанию — это часовой пояс, определенный параметром default_timezone
в разделе [core]
. Если
вы только что установили Airflow, он будет установлен на utc
, что рекомендуется. Вы также можете установить его на система
или часовой пояс IANA (например, Европа / Амстердам
).Группы DAG также оцениваются для работников Airflow,
Поэтому важно убедиться, что этот параметр одинаков для всех узлов Airflow.
[основной] default_timezone = utc
Группы DAG с учетом часовых поясов
Создать группу обеспечения доступности баз данных с учетом часовых поясов довольно просто. Просто не забудьте указать часовой пояс start_date
с помощью маятника
.
импортный маятник local_tz = pendulum.timezone («Европа / Амстердам») default_args = dict (start_date = datetime (2016, 1, 1, tzinfo = local_tz), owner = "воздушный поток") dag = DAG ("my_tz_dag", default_args = default_args) op = DummyOperator (task_id = "dummy", dag = dag) печать (dag.часовой пояс) # <Часовой пояс [Европа / Амстердам]>
Обратите внимание, что хотя можно установить start_date
и end_date
для Задач часовой пояс DAG или глобальный часовой пояс (в этом порядке) всегда будет
используется для расчета интервалов данных. При первой встрече дата начала или окончания
дата будет преобразована в UTC с использованием часового пояса, связанного с start_date
или end_date
, тогда для расчетов информация о часовом поясе будет
игнорируется.
Шаблоны
Airflow возвращает дату и время с учетом часового пояса в шаблонах, но не преобразует их в местное время, поэтому они остаются в формате UTC. Это остается на усмотрение группы DAG.
импортный маятник local_tz = pendulum.timezone («Европа / Амстердам») local_tz.convert (логическая_дата)
Расписания Cron
Группы DAG с учетом часовых поясов, которые используют расписания cron, учитывают переход на летнее время
время. Например, группа доступности базы данных с датой начала в часовом поясе США / Восток
с расписанием 0 0 * * *
будет работать ежедневно в 04:00 UTC в течение
летнее время и в 05:00 в противном случае.
Разница во времени
Группы DAG с учетом часовых поясов, использующие расписания timedelta
или relativedelta
соблюдать летнее время для даты начала, но не корректировать
летнее время при планировании последующих запусков. Например,
DAG с начальной датой pendulum.datetime (2020, 1, 1, tz = "US / Eastern")
и интервал расписания timedelta (days = 1)
будет запускаться ежедневно в 05:00
UTC независимо от летнего времени.
Как работать с часовыми поясами с помощью DateTime и Luxon
Поднимите руку, если у вас когда-либо были проблемы с часовыми поясами, или даже если вы спрашивали: «Как преобразовать объект Date в другой часовой пояс в JavaScript? »
По моему личному опыту, такого рода требования могут стать большой проблемой для разработчиков, если концепции, связанные с обработкой дат, не совсем понятны или не используются правильные инструменты.
# Использование даты и часовых поясов в JavaScript
Предположим, у вас есть представление даты из внешнего API, и вам нужно преобразовать дату в любой желаемый часовой пояс.
Лучшим вариантом для этого является использование представления, соответствующего стандарту ISO 8601. В качестве примера мы можем установить дату, например, 2021/06/10 02:20:50
по всемирному координированному времени. Тогда стандартным обозначением этой даты будет 2021-06-10T02: 20: 50 + 00: 00
.
С другой стороны, язык JavaScript предоставляет объект Date
, который представляет отдельный момент времени.Вы можете создать объект Date по-разному:
год выпуска;
дата = новая дата ();
date = новая Дата ("2021-06-10T02: 20: 50 + 00: 00");
date = новая дата (новая дата ());
Кроме того, мы можем установить значение часового пояса для любого заданного объекта Date
следующим образом:
пусть stringInput = "2021-06-10T02: 20: 50 + 00: 00";
let timeZone = "Америка / Лос-Анджелес";
const dateObject = new Date (stringInput) .toLocaleString ("en-US", {
часовой пояс,
});
console.log (dateObject);
Метод toLocaleString
возвращает строку с зависящим от языка представлением объекта Date
.В то же время этот метод поддерживает необязательные аргументы, в которых вы можете настроить часовой пояс. Подробнее об этом методе читайте здесь.
Как видите, дата вывода соответствует настроенному часовому поясу (GMT-7). Однако у нас есть строковое представление даты, и было бы намного лучше, если бы мы вместо этого работали с объектом JavaScript.
# Люксон
Luxon считается развитием Moment.js — очень популярной библиотеки для обработки дат в экосистеме JavaScript.
Как говорится в проекте Luxon:
Luxon — это мощная, современная и удобная оболочка для дат и времени JavaScript.
Действительно, эта библиотека решает большинство распространенных проблем, связанных с обработкой дат:
- Дата интернационализации
- Часовые пояса и смещения
- Поддержка календарей
- Форматирование дат
- Разбор дат
- Математика дат (сложение / вычитание дней, месяцев и т. Д.)
- Даты подтверждения
- и другие…
# Объект DateTime
Наиболее важной частью библиотеки Luxon является объект DateTime
. Его можно рассматривать как оболочку собственного объекта Date
вместе с часовым поясом и локальной конфигурацией.
Самый простой способ создания объекта DateTime
следующий.
импорт {DateTime} из "luxon";
пусть dateTime = DateTime.local ();
console.log («Текущая дата», dateTime.toISO ());
Метод toISO ()
вернет строковое представление объекта DateTime
в соответствии с ISO 8601.
Кроме того, вы можете создать DateTime
в определенном часовом поясе.
let zone = "Америка / Денвер";
let dateTime = DateTime.fromObject ({
зона
});
console.log («Текущая дата», dateTime.toISO ());
Как вы можете сравнить с предыдущим примером, вывод времени отличается из-за использования America / Denver
в качестве часового пояса.
Конечно, есть способ создать собственную дату в определенном часовом поясе:
пусть dateTime = DateTime.fromObject ({
'Америка / Денвер',
}).установленный({
1 день,
месяц: 5,
год: 2021,
});
console.log («Настраиваемая дата», dateTime.toISO ());
Метод set
позволяет переопределить определенные свойства, такие как год
, месяц
, день
и т. Д.
# Преобразование DateTime в другой часовой пояс
Теперь предположим, что у нас есть объект DateTime
, и нам нужно преобразовать его в другой часовой пояс.
пусть dateTime = DateTime.fromObject ({
'Америка / Денвер',
}).установленный({
1 день,
месяц: 5,
год: 2021,
});
dateTime = dateTime.setZone ("Америка / Ла_Паз");
console.log («Настраиваемая дата, Америка / Ла_Паз», dateTime.toISO ());
# Настройка часового пояса по умолчанию
Что происходит, когда все приложение должно запускаться каждую дату в определенном часовом поясе? Просто предположим, что вы определили конфигурацию в своем приложении, чтобы разрешить выбор часового пояса в любое время.
Чтобы решить эту проблему, вам не нужно использовать строку часового пояса здесь и там.Вместо этого на помощь приходит класс Settings
:
импорт {Настройки} из "luxon";
Settings.defaultZoneName = "Америка / Денвер";
console.log (Settings.defaultZoneName);
defaultZoneName
может использоваться как метод set
или get
для часового пояса по умолчанию при работе с библиотекой.
Таким же образом класс Settings
содержит другие методы для настройки поведения Luxon.
Затем, когда вы снова создаете новый объект DateTime
, он будет использовать настроенный часовой пояс по умолчанию.
dateTime = DateTime.local ();
console.log («Настроено defaultZoneName», dateTime.toISO ());
Обратите внимание на значение смещения, которое теперь соответствует America / Denver
.
# Проверить часовой пояс
Если вы определяете точку входа пользователя для глобальной настройки часового пояса, важно проверить текст, прежде чем вызывать проблемы с объектами DateTime
.
Полезный способ сделать это опять же — использовать объект DateTime
:
const timeZone = "Америка / Not_Defined_TZ";
const myDateTime = DateTime.local (). setZone (timeZone);
console.log ("действительный часовой пояс", myDateTime.isValid);
Теперь попробуйте еще раз с допустимым часовым поясом, например America / Los_Angeles
.
# Живая демонстрация
Хотите поиграться с этим кодом? Просто откройте встроенный редактор CodeSandbox:
# Заключение
В этой статье я описал несколько полезных методов использования Luxon для обработки часовых поясов с использованием JavaScript или TypeScript.Лично я считаю это очень полезной библиотекой, а также позволяет избежать переписывания и тестирования вашего собственного кода для обработки дат и часовых поясов, что может сэкономить вам много времени.
Не стесняйтесь обращаться в Twitter, если у вас есть какие-либо вопросы. Следуйте за мной на GitHub, чтобы узнать больше о моей работе.
This Dot Labs — это современная веб-консалтинговая компания, цель которой — помочь компаниям реализовать свои усилия по цифровой трансформации. Чтобы получить руководство по архитектуре, обучение или консультации по React, Angular, Vue, веб-компонентам, GraphQL, Node, Bazel или Polymer, посетите thisdotlabs.com.
Эта Dot Media ориентирована на создание инклюзивной и образовательной сети для всех. Мы держим вас в курсе достижений современной сети с помощью мероприятий, подкастов и бесплатного контента. Чтобы узнать, посетите thisdot.co.
Как настроить политики NAT на брандмауэре SonicWall?
14.10.2021 4 455 человек сочли эту статью полезной 93 574 просмотров
Описание
Механизм преобразования сетевых адресов (NAT) в SonicOS Enhanced позволяет пользователям определять детальные политики NAT для входящего и исходящего трафика.В этой статье показаны различные типы политик NAT, которые можно настроить в SonicWall для различных целей .
В этой статье мы будем использовать следующие IP-адреса в качестве примеров, чтобы продемонстрировать создание и активацию политики NAT. Вы можете использовать эти примеры для создания политик NAT для вашей сети, заменив свои IP-адреса на примеры, показанные здесь:
- 192.168.1.0/24 IP-подсеть на интерфейсе X0
- 1.1.1.0/24 IP-подсеть на интерфейсе X1
- 192.168.30.0/24 IP-подсеть на интерфейсе X3
- X0 LAN IP-адрес 192.168.1.1
- X1 WAN IP-адрес 1.1.1.1
- X3 IP-адрес 192.168.30.1 «Частный» адрес веб-сервера
- : 192.168.1.100
- «Общий» адрес веб-сервера: 1.1.1.1
Разрешение
Разрешение для SonicOS 7.X
Этот выпуск включает в себя значительные изменения пользовательского интерфейса и множество новых функций, которые отличаются из SonicOS 6.5 и более ранние прошивки. Приведенное ниже разрешение предназначено для клиентов, использующих прошивку SonicOS 7.X.
Многие к одному NAT
Это наиболее распространенная политика NAT, которая позволяет преобразовывать группу адресов в один адрес. Обычно это означает, что вы переводите исходящий запрос внутреннего IP-адреса (частной подсети) в исходящий запрос. IP-адрес WAN-порта SonicWall. В этом случае пункт назначения видит запрос, поступающий с IP-адреса WAN-интерфейса SonicWall, а не с внутреннего IP-адреса.
SonicWall имеет предварительную конфигурацию исходящей политики NAT по умолчанию для каждого интерфейса, настроенного на странице Policy | Rules and Policies | NAT Rules , преобразующей все исходящие запросы в IP-адрес основного интерфейса WAN SonicWall.
Чтобы просмотреть предварительно настроенные политики NAT по умолчанию в SonicWall, перейдите к Политики | Правила и политики | Правила NAT. Вы можете добавить политики NAT в том же разделе.
ПРИМЕР: На следующем изображении показано меню конфигурации такой политики NAT по умолчанию для преобразования исходящего трафика на IP-адрес интерфейса X1 SonicWall.Мы также можем посмотреть трансляцию сетевых адресов в формат диаграммы, включив отображение диаграммы.
Однако в определенных сценариях может потребоваться преобразовать определенную подсеть в IP-адрес, отличный от первичного IP-адреса WAN. Такую политику NAT просто создать и активировать. Чтобы создать политику NAT, позволяющую всем системам на интерфейсе X1 инициировать трафик с использованием общедоступного IP-адреса, отличного от основного IP-адреса WAN SonicWall, выполните следующие действия:
One to One NAT
Это еще одна распространенная политика NAT на SonicWall, позволяющая преобразовывать внутренний IP-адрес в уникальный IP-адрес.Это полезно, когда вы хотите, чтобы определенные системы, такие как серверы, использовали определенный IP-адрес, когда они инициируют трафик в другие места назначения. В большинстве случаев политика NAT, подобная этой, используется для сопоставления частного IP-адреса сервера с общедоступным IP-адресом, и она сочетается с политикой зеркала, которая позволяет любой системе из общедоступного Интернета получать доступ к серверу вместе с сопоставлением разрешающее правило доступа брандмауэра.
В этом примере мы решили продемонстрировать веб-сервер, использующий службу HTTP, однако следующие шаги применимы к любой службе, которую вы хотите использовать (например, HTTPS, SMTP, FTP, службы терминалов, SSH и т. Д.).
Создание необходимых объектов адреса
- Щелкните Object в верхнем меню навигации.
- Перейти к Сопоставить объекты | Адреса .
- Нажмите кнопку Добавить и создайте два объекта адреса: один для частного IP-адреса рассматриваемого устройства, а другой — для общедоступного IP-адреса.
Адресный объект для сервера в локальной сети
Имя: W ebserver Private
Назначение зоны: LAN
Тип: Хост
IP-адрес: 192.168.1.100
Адресный объект для общедоступного IP-адреса сервера
Имя: W ebserver Public
Назначение зоны: WAN
Тип: Адрес хоста 90.180
IP-адрес: IP-адрес 90.180
Создание политики NAT для входящего трафика
Эта политика позволяет преобразовывать внешний общедоступный IP-адрес во внутренний частный IP-адрес. Эта политика NAT в сочетании с правилом разрешения доступа позволяет любому источнику подключаться к внутреннему серверу с использованием общедоступного IP-адреса.SonicWall будет обрабатывать перевод между частным и общедоступным адресом. Ниже мы будем создавать политику NAT, а также правило, разрешающее HTTP-доступ к серверу.
- В графическом интерфейсе управления SonicWall щелкните Политики в верхнем меню навигации.
- Перейдите к правилам и политикам | Страница правил NAT .
- Нажмите кнопку Добавить и выберите следующие параметры в раскрывающемся меню
Мы также можем просмотреть политики NAT, созданные в структурном формате, включив параметр Показать диаграмму :
Пользователи также могут включить опцию Dock Diagram в политиках NAT:
Политика NAT для входящего трафика
- Исходный источник: Любой
- Переведенный источник: Исходный
- Исходный пункт назначения: Веб-сервер Общедоступный
- Переведенное назначение: Веб-сервер Частный
- Исходная служба: HTTP
- Переведенная служба: Оригинал
- Входящий интерфейс: Любой
- Исходящий интерфейс: Любой
- Включить политику NAT: Проверил
- Создайте рефлексивную политику: Если вы установите этот флажок, зеркальная (исходящая или входящая) политика NAT создается автоматически в соответствии с параметрами, заданными в окне «Добавить политику NAT».В примере политики NAT, когда установлен флажок «Создать рефлексивную политику», будет создана исходящая политика NAT, как показано на снимке экрана ниже.
Пример исходящей / рефлексивной политики:
DNS Loopback NAT policy
Назначение политики DNS Loopback NAT заключается в том, чтобы хост в LAN или DMZ мог получить доступ к веб-серверу на LAN (192.168.1.100) с использованием общедоступного IP-адреса сервера (1.1.1.1) или по его полному доменному имени (FQDN).
- Войдите в интерфейс управления SonicWall
- Щелкните Policy в верхнем меню навигации.
- Перейдите к Правилам и политикам | Правила NAT
- Нажмите Добавить и создайте политику NAT, следуя приведенному ниже примеру из раскрывающихся меню
ПРИМЕР: В приведенном ниже примере в качестве исходного источника используются подсети с межсетевым экраном. , но это может потребоваться отрегулировать, чтобы включить все подсети за SonicWall, если вы маршрутизируете дополнительные подсети через устройство уровня 3 за SonicWall.Трафик транслируется на общедоступный IP-адрес веб-сервера (но это может быть любой общедоступный адрес), чтобы иметь возможность общаться и транслировать обратно через устройство SonicWall. Этот процесс можно обойти, создав локальную запись DNS для перевода вашего веб-сервера на его частный IP-адрес.
- Исходный источник: Межсетевые экраны подсетей
- Переведенный источник: Общедоступный Wwebserver
- Первоначальное назначение: Общедоступное Wwebserver
- Переведенное назначение: Wwebserver
Частное обслуживание950 95094 Служба перевода: Исходный
- Входящий интерфейс: Любой
- Исходящий интерфейс: Любой
- Включить политику NAT: Проверено
Преобразование адресов входящего порта через WAN (X1) IP-адрес:
Это одна из наиболее сложных политик NAT, которые вы можете создать на устройстве SonicWall UTM с прошивкой SonicOS Enhanced.Он позволяет использовать IP-адрес WAN устройства SonicWall для обеспечения доступа к нескольким внутренним серверам. Это наиболее полезно в ситуациях, когда ваш интернет-провайдер предоставил только один общедоступный IP-адрес, и этот IP-адрес должен был использоваться WAN-интерфейсом SonicWall.
Ниже мы предоставим общий доступ к двум внутренним веб-серверам через WAN IP-адрес SonicWall; каждый будет привязан к уникальному настраиваемому порту. В примерах мы будем настраивать только два, но можно создать и больше, если все порты уникальны.
В этом разделе у нас есть пять задач, которые необходимо выполнить:
- Создайте два настраиваемых объекта службы для уникальных общедоступных портов, на которые будут отвечать серверы
- Создайте два объекта адреса для частных IP-адресов серверов
- Создайте две записи NAT чтобы два сервера могли инициировать трафик в общедоступный Интернет.
- Создайте две записи NAT для сопоставления настраиваемых портов с фактическими портами прослушивания и сопоставления частных IP-адресов с IP-адресом WAN SonicWall.
- Создайте две записи правил доступа, чтобы разрешить любому общедоступному пользователю подключаться к обоим серверам через WAN IP-адрес SonicWall и соответствующие уникальные настраиваемые порты серверов
Создание двух настраиваемых портов:
- Вход в интерфейс управления SonicWall
- Щелкните Object в верхнем меню навигации
- Перейдите к Match Objects | Услуги.
- Нажмите кнопку Добавить и создайте порты, которые будут использоваться серверами.
ПРИМЕР: В приведенном ниже примере веб-сервер 1 будет использовать порт 4433 для служб 443, а веб-сервер 2 будет использовать порт 4434 для служб 443.
Создание двух адресных объектов:
- Войдите в интерфейс управления SonicWall.
- Щелкните Объект в верхнем меню навигации.
- Перейти к Сопоставить объекты | Адреса .
- Нажмите кнопку Добавить и создайте частный и общедоступный IP-адреса, которые будут использоваться серверами.
ПРИМЕР: Для целей нашего примера IP-адреса частного веб-сервера будут настроены на 192.168.1.100 и 192.168.1.101
Создание входящих политик NAT:
Чтобы создать политики NAT для сопоставления настраиваемые порты на реальные порты прослушивания серверов и для сопоставления IP-адреса WAN SonicWall с частными адресами серверов, создайте следующие политики NAT
- Войдите в интерфейс управления SonicWall.
- Щелкните Политика в верхнем меню навигации.
- Перейдите к Правилам и политикам | Правила NAT
- Нажмите Добавить и создайте политику NAT, следуя приведенным ниже примерам из раскрывающихся меню. ПРИМЕР: Ниже приведены два примера политик NAT, созданных с использованием той же информации из объектов службы и адреса, созданных выше. Оба частных IP-адреса транслируются с одного и того же общедоступного IP-адреса, но основаны на разных исходных портах. При наличии этих политик SonicWall будет преобразовывать общедоступный IP-адрес сервера в частный IP-адрес, когда запросы на соединение прибывают из интерфейса WAN, привязанного к IP общедоступного адреса веб-сервера.Чтобы получить доступ к веб-серверу 192.168.1.100, пользователи Интернета должны ввести https://1.1.1.1:4433 в свой веб-браузер.
Аналогичным образом, чтобы получить доступ к веб-серверу 192.168.1.101, введите https://1.1.1.1:4434.
ПРИМЕЧАНИЕ. Необходимо создать политики NAT для исходящего трафика, если трафик должен генерироваться с серверов отдельно и транслироваться на тот же общедоступный IP-адрес.
Мы также можем включить Создайте рефлексивную политику в разделе Политики NAT в разделе Advanced / Actions . Переназначение порта источника также можно включать и отключать в том же разделе.
Разрешение для SonicOS 6.5
Этот выпуск включает значительные изменения пользовательского интерфейса и множество новых функций, которые отличаются от прошивки SonicOS 6.2 и более ранних версий. Приведенное ниже разрешение предназначено для клиентов, использующих SonicOS 6.5 прошивка.
Многие к одному NAT
Это наиболее распространенная политика NAT в SonicWall, которая позволяет преобразовывать группу адресов в один адрес. В большинстве случаев это означает, что вы берете внутреннюю «частную» IP-подсеть и транслируете все исходящие запросы в IP-адрес порта WAN SonicWall, так что пункт назначения видит запрос как исходящий с IP-адреса SonicWall. Порт WAN, а не с внутреннего частного IP-адреса.
SonicWall имеет предварительную конфигурацию исходящей политики NAT по умолчанию для каждого интерфейса, настроенного в Manage | Сеть | Страница интерфейсов, преобразующая все исходящие запросы в IP-адрес основного порта WAN SonicWall (WAN Primary IP). Для просмотра предварительно настроенных политик NAT по умолчанию в SonicWall щелкните Manage | Правила | Политики NAT .
ПРИМЕР: На следующем изображении показано меню конфигурации такой политики NAT по умолчанию для преобразования исходящего трафика на IP-адрес интерфейса X1 SonicWall.
Однако в определенных сценариях может потребоваться преобразовать определенную подсеть в IP-адрес, отличный от первичного IP-адреса WAN. Такую политику NAT просто создать и активировать. Чтобы создать политику NAT, позволяющую всем системам на интерфейсе X1 инициировать трафик с использованием общедоступного IP-адреса, отличного от основного IP-адреса WAN SonicWall, выполните следующие действия:
- Войдите в интерфейс управления SonicWall
- Щелкните Manage in the верхнее меню навигации.
- Перейти к объектам | Адресные объекты .
- Нажмите кнопку Добавить , чтобы добавить новый объект адреса для альтернативного IP-адреса WAN, в который вы хотите выполнить преобразование.
ПРИМЕР: См. Снимок экрана ниже, где показан пример создания объекта Host и 1.1.1.2. IP - это то, что объекты будут преобразованы NAT.
- Перейдите к правилам | NAT Политики стр.
- Нажмите Добавить , чтобы создать новую политику NAT.
ПРИМЕР: Пример политики NAT, созданный ниже для справки после приведенных выше примеров
- Исходный источник: Подсеть X3
- Переведенный источник: Общедоступный IP-адрес X3
- Исходное назначение: Любое
- Переведенное назначение: Исходный
- Исходный сервис: Любой
- Переведенный сервис: Исходный
- Интерфейс источника: X3
- Интерфейс назначения: X1
- Политика включения NAT: Включено
- Комментарий: ( введите краткое описание)
Один к одному NAT
Это еще одна распространенная политика NAT в SonicWall, которая позволяет преобразовывать внутренний IP-адрес в уникальный IP-адрес.Это полезно, когда вы хотите, чтобы определенные системы, такие как серверы, использовали определенный IP-адрес, когда они инициируют трафик в другие места назначения. В большинстве случаев политика NAT, подобная этой, используется для сопоставления частного IP-адреса сервера с общедоступным IP-адресом, и она сочетается с политикой зеркала, которая позволяет любой системе из общедоступного Интернета получать доступ к серверу вместе с сопоставлением разрешающее правило доступа брандмауэра.
В этом примере мы решили продемонстрировать веб-сервер, использующий службу HTTP, однако следующие шаги применимы к любой службе, которую вы хотите использовать (например, HTTPS, SMTP, FTP, службы терминалов, SSH и т. Д.).
Создание необходимых объектов адреса
- Щелкните Управление в верхнем меню навигации.
- Перейти к объектам | Адресные объекты .
- Нажмите кнопку Добавить и создайте два объекта адреса: один для частного IP-адреса рассматриваемого устройства, а другой - для общедоступного IP-адреса.
Адресный объект для сервера в локальной сети
Имя: W частный веб-сервер
Назначение зоны: LAN
Тип: Хост
IP-адрес: 192.168.1.100
Адресный объект для общедоступного IP-адреса сервера
Имя: W общедоступный веб-сервер
Назначение зоны: WAN
Тип: Хост
IP-адрес: 1.1.1.1
Эта политика позволяет преобразовывать внешний общедоступный IP-адрес во внутренний частный IP-адрес. Эта политика NAT в сочетании с правилом разрешения доступа позволяет любому источнику подключаться к внутреннему серверу с использованием общедоступного IP-адреса.SonicWall будет обрабатывать перевод между частным и общедоступным адресом. Ниже мы будем создавать политику NAT, а также правило, разрешающее HTTP-доступ к серверу.
- В графическом интерфейсе управления SonicWall щелкните Управление в верхнем меню навигации.
- Перейдите к правилам | Политики NAT стр.
- Нажмите кнопку Добавить и выберите следующие параметры в раскрывающемся меню:
Политика NAT для входящих Исходный источник: Любой |
Пример исходящей / рефлексивной политики |
ПРИМЕЧАНИЕ: Если вам нужно создать правило доступа, разрешающее трафик через брандмауэр, обратитесь к политике входящего NAT. to Как включить переадресацию портов и разрешить доступ к серверу через SonicWall
Политика DNS Loopback NAT
Цель политики DNS Loopback NAT состоит в том, чтобы хост в LAN или DMZ мог получить доступ к веб-серверу на ЛВС (192.168.1.100), используя общедоступный IP-адрес сервера (1.1.1.1) или его полное доменное имя (FQDN).
- Войдите в интерфейс управления SonicWall
- Щелкните Manage в верхнем меню навигации.
- Перейти к правилам | Политики NAT
- Нажмите кнопку «Добавить» и создайте политику NAT, следуя приведенному ниже примеру из раскрывающихся меню.
ПРИМЕР: В приведенном ниже примере подсети с межсетевым экраном используются в качестве исходного источника, но может потребоваться корректировка, чтобы включить все подсети, находящиеся за SonicWall, если вы маршрутизируете дополнительные подсети через устройство уровня 3 за SonicWall.Трафик транслируется на общедоступный IP-адрес веб-сервера (но это может быть любой общедоступный адрес), чтобы иметь возможность общаться и транслировать обратно через устройство SonicWall. Этот процесс можно обойти, создав локальную запись DNS для перевода вашего веб-сервера на его частный IP-адрес.
- Исходный источник: Межсетевые экраны подсетей
- Переведенный источник: Mywebserver Public
- Исходное назначение: Mywebserver Public
- Переведенное назначение: Mywebserver HTTP
09 Исходная служба Переведенная услуга: Исходный
- Входящий интерфейс: Любой
- Исходящий интерфейс: Любой
- Включить политику NAT: Проверено
- Создать рефлексивную политику: не отмечено
Адрес входящего порта через WAN (X1) IP-адрес
Это одна из наиболее сложных политик NAT, которые вы можете создать на устройстве SonicWall UTM с прошивкой SonicOS Enhanced.Он позволяет использовать IP-адрес WAN устройства SonicWall для обеспечения доступа к нескольким внутренним серверам. Это наиболее полезно в ситуациях, когда ваш интернет-провайдер предоставил только один общедоступный IP-адрес, и этот IP-адрес должен был использоваться WAN-интерфейсом SonicWall.
Ниже мы предоставим общий доступ к двум внутренним веб-серверам через WAN IP-адрес SonicWall; каждый будет привязан к уникальному настраиваемому порту. В примерах мы будем настраивать только два, но можно создать и больше, если все порты уникальны.
В этом разделе у нас есть пять задач, которые необходимо выполнить:
- Создайте два настраиваемых объекта службы для уникальных общедоступных портов, на которые будут отвечать серверы
- Создайте два объекта адреса для частных IP-адресов серверов
- Создайте две записи NAT чтобы два сервера могли инициировать трафик в общедоступный Интернет
- Создайте две записи NAT для сопоставления настраиваемых портов с фактическими портами прослушивания и сопоставьте частные IP-адреса с IP-адресом WAN SonicWall
- Создайте две записи правил доступа для разрешить любому общедоступному пользователю подключаться к обоим серверам через IP-адрес WAN SonicWall и соответствующие уникальные настраиваемые порты серверов
Создание двух настраиваемых портов:
Создание двух адресных объектов:
Создание входящих политик NAT:
Для создания Политики NAT для сопоставления настраиваемых портов с реальными портами прослушивания серверов и сопоставления IP-адреса WAN SonicWall с частным адресом серверов. sses, создайте следующие политики NAT.
- Войдите в интерфейс управления SonicWall
- Щелкните Manage в верхнем меню навигации.
- Перейти к правилам | Политики NAT
- Нажмите «Добавить» и создайте политику NAT, следуя приведенным ниже примерам из раскрывающихся меню.
ПРИМЕР: Ниже приведены два примера политик NAT, созданных с использованием той же информации из объектов службы и адреса, созданных выше. Оба частных IP-адреса транслируются с одного и того же общедоступного IP-адреса, но основаны на разных исходных портах. При наличии этих политик SonicWall будет преобразовывать общедоступный IP-адрес сервера в частный IP-адрес, когда запросы на соединение прибывают из интерфейса WAN, привязанного к IP общедоступного адреса веб-сервера.Чтобы получить доступ к веб-серверу 192.168.1.100, пользователи Интернета должны ввести https://1.