Программирование – это не только написание сложных кодовых структур. Рано или поздно каждый разработчик сталкивается с форматированием даты, а также времени. За реализацию подобных операций отвечают специализированные классы. Их довольно много, но на практике используются преимущественно два варианта.
При помощи соответствующих классов в Java можно вычислять текущее время. Дополнительно программеры смогут задействовать для форматирования отдельный class в Джаве. В данной статье будет рассказано об этих нюансах, а также об основах работы с календарем при создании приложений на Java.
Но перед этим стоит понять, нужно ли вообще разбираться в целых классах Джавы. Это не всегда простая задача, особенно для новичков.
Java – перспективный и современный язык программирования. Он предусматривает:
- простой для понимания и интерпретации синтаксис;
- многофункциональность;
- разнообразные инструменты для быстрого коддинга и создания крупных проектов;
- наличие ООП.
Писать на этом языке можно совершенно разные программы – и для работы, и для развлечений. Основное предназначение Java – работа с веб-утилитами. В них вопросы, связанные с датой и временем, иногда обостряются.
Отличительной особенностью Java является то, что это – универсальный кроссплатформенный язык. Перенести программу с одной платформы на другую не составит никакого труда. Данный вариант – отличный выбор как для новичка, так и для опытного программиста.
Внимание: большинство движков для создания игр поддерживают Джава-семейство.
Терминологический вопрос – что запомнить перед началом работы
Для того, чтобы работать с текстом, а также объектами в программном коде, разработчик должен понимать, с чем он имеет дело. В программировании есть термины, без осознания которых создать собственное приложение и понять, как оно работает, невозможно.
Чтобы не запутаться в понятиях, рекомендуется запомнить следующие понятия:
- алгоритмы – свод правил и инструкций, предназначенных для решения определенных задач;
- аргументы – значения, передаваемые в функции и команды;
- переменные – элементарные «хранилища» информации;
- объекты – сочетания связанных переменных, констант, а также иных сведений структурного характера, способные выбираться и обрабатываться совместно;
- класс – набор связанных объектов с общими свойствами;
- методы – список правил, определяющих возможности того или иного элемента кода;
- цикл – неоднократное повторение одних и тех же манипуляций (части кодификации);
- константа – неизменяемое в ходе выполнения утилиты значение;
- массив – перечень/группы схожих типов информации, подлежащий группировке;
- операнд – элемент, которым удается манипулировать через так называемые операторы;
- оператор – объект в программном коде, позволяющий управлять операндами (пример – сложение или вычитание).
Непосредственно с датой и часами перечисленные термины ничего общего не имеют, но предложенная вниманию информация будет полезна в процессе создания собственных приложений. Как тех, кто работают с часами, так и примитивных утилит. Это – база, которая пригодится любому программисту перед началом работы.
Разбор календаря – с чем предстоит иметь дело
Каждый современный человек знает, что такое календарь. Можно использовать форматирование calendar в своих приложениях при программировании. Это – весьма полезные опции, которые довольно легко реализовать на практике.
Пользователю предстоит работать со следующими элементами:
- какое сейчас/было число (день недели, конкретная дата (включая месяц));
- часовой пояс;
- время (час, минута, секунда).
Для того, чтобы понять, какие объекты будут корректироваться и определяться, достаточно посмотреть на «часы» в операционной системе. Там отображается текущая дата, а также конкретное время.
Внимание: на компьютере соответствующая «часовая» информация – это определенное количество миллисекунд. При программировании подобные данные будут храниться в отдельном классе/файле.
Классы в Java для работы с часами
Для того, чтобы работать с форматом даты в Java, предстоит изучить несколько отдельных классов. Джава предусматривает их для того, чтобы использовать в приложениях и играх calendar.
На данный момент известны следующие варианты классов:
- Date;
- Calendar;
- TimeZone.
Первый два – самостоятельные составляющие, которые относятся к библиотеке java.utill. Последний обособлено не задействуется.
Класс Date
С января 1970 года хранит часы в миллисекундах. Класс обладает собственным конструктором по умолчанию. Он отвечает за конкретную операцию – возвращает текущее время.
Разработчики могут заняться созданием объекта Date при помощи конструктора, принимающего количество миллисекунд, начиная с 1970 года. Для того, чтобы уточнить внутреннее время, принято использовать методы класса Date под «названиями» setTime и getTime.
При применении класса Date осуществляется инициализация объекта. Дата и часы будут зависеть от задействованного конструктора. Всего их несколько:
- Date() — отвечает за часы и дату объекта на данный момент, «здесь и сейчас»;
- Date(long millisec) – принятие аргумента, равного количеству миллисекунд, прошедших с начала 1.01.1970 года.
В основном на практике встречается первый вариант. Чуть позже будет приведен наглядный пример того, как использовать дату и часы с соответствующим «элементом» программного кода.
О методах
Date имеет множество разнообразных методов. Они отвечают за те или иные манипуляции. Ориентироваться можно на следующую информацию:
- Int compareTo(дата дата) – производит сравнение дат. Если они совпадают, значение возвращается к 0, отрицательным оно будет, если вызывающая дата более ранняя. В противном случае – значение положительное.
- Boolean equals(object object) – при совпадении дат происходит возврат true.
- Long GetTime() – указывает, сколько миллисекунд на момент отправки запроса прошло с 1 января 1970 года.
- Void setTime(long milliseconds) – установка часов и даты в количестве миллисекунд, которые прошли с 1970-го.
- Boolean after(date date) – когда объект содержит более позднюю дату, нежели прописано в параметре date, возвращается значение «истина».
- Boolean before – аналогично предыдущему варианту, но true выходит, если объект включает в себя более ранее «значение».
Все это помогает взаимодействовать с часами, а также с тем, какое сегодня/было когда-то число.
Вот пример вывода даты в консоль:
И наглядный образец применения GetTime():
У рассматриваемого class есть подкласс, который тоже весьма активно применяется на практике. Он пригодится при непосредственном форматировании.
Подкласс SimpleDateFormat
SimpleDateFormat – это отдельный и удобный класс, который является своеобразным подклассом DateFormat. Позволяет отображать месяц, число и часы в том формате, который кажется пользователю наиболее удобным.
Чтобы лучше понимать принцип его работы, стоит рассмотреть наглядный пример кода:
package ru.test;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Test
{
public void test()
{
Date d = new Date();
SimpleDateFormat format1;
SimpleDateFormat format2;
format1 = new SimpleDateFormat(
"dd.MM.yyyy hh:mm");
format2 = new SimpleDateFormat(
"День dd Месяц MM Год yyyy Время hh:mm");
System.out.println(
format1.format(d) // 25.02.2013 09:03
);
System.out.println(
format2.format(d)
// День 25 Месяц 02 Год 2013 Время 09:03
);
}
}
Для того, чтобы создать такой шаблон, пришлось использовать подобные параметры:
- dd – day;
- MM – название месяца;
- yyyy – год;
- hh – часы;
- mm – минуты.
Под видом разделителя можно применять современно разный текст. Тот, что разработчику приходится по вкусу больше всего.
Символика форматирования строк
SimpleDateFormat – это подкласс DateFormat, который дает возможность определять собственные шаблоны для вывода на экран даты и времени. Для реализации поставленной задачи принято использовать определенные символьные записи.
К ним относят:
- A – AM или PM (актуально для часов в 12-часовом «формате»);
- d – день месяца;
- D – день года;
- H – часы, которые работают в формате день/ночь;
- K – «суточные» часы;
- S – секунды;
- M – минуты;
- W – week of year;
- y – год;
- z – часовой пояс.
То, сколько раз повторяется конкретный символ, указывает на способ представления календарной информации. Так можно использовать записи yyyy-mm-dd и hh:mm:ss или yy-mm-dd и h:m:s. В первом случае будет запись типа 1994-01-15 и 20:45:15. Во втором, если требуется, перед соответствующей цифрой будет выводиться дополнительный 0.
Класс Calendar
Для того, чтобы работать с календарной информацией, разработчику предоставляют разнообразные методы. Есть абстрактный класс Calendar, которые умеет работать в пределах календаря с датами. Он может прибавлять дни, а также принимать во внимание високосные года. Дополнительно преобразовывает время (миллисекунды) в более удобном пользователю формате.
Реализация Calendar производится классом GregorianCalendar. Как и у Data конструктор будет возвращать календарь на текущий день. Но здесь допустимо задавать его явным образом. Достаточно прописать все параметры оного:
Здесь:
- areFieldsSet – указатель на то, были ли заданы компоненты времени;
- fields – массив целочисленных значений временных элементов;
- isSet – массив вида Boolean, который указывает на наличие специфического компонента «часов»;
- time (типа long) – текущее время элемента;
- isTimeSet – указатель на установку текущих «часов».
Данный вариант является весьма мощным, особенно если нужно вывести на экран полное название месяца или недели.
Методы
Для того, чтобы задействовать Calendar, необходимо запомнить следующие методы:
Формат даты можно менять при помощи соответствующего класса и различных типов данных. К ним относят следующие варианты:
- day_of_week – день недели;
- day_of_year – день года;
- day_of_month – месяц (день);
- week_of_month – неделя месяца;
- week_of_year – годовая неделя;
- Year – год;
- Calendar.ERA – эра.
С Day_of_week предстоит взаимодействовать, если хочется на календаре или в приложении вывести название конкретного дня недели.
Это – наглядный пример того, как можно использовать перечисленные типы информации на практике.
О классе GregorianCalendar
Используя текущую дату в Java, можно столкнуться с подклассом Calendar, который носит название GregorianCalendar. Он представляет Григорианский календарь. При помощи метода getInstance() происходит возврат объекта GregorianCalendar, инициированный нынешней датой и часами согласно региональным параметрам.
Класс имеет поля AD и BC. Первый вариант – до нашей эры, второй – наша эра. И дополнительно здесь предусматривается метод isLeapYear(). Отвечает за проверку високосности года. Выглядит так:
При применении подобной «операции», происходит проверка. Когда год является високосным, программа возвращает значение true.
Промежутки времени, которые нужны программисту, могут быть получены через метод get(). Вот пример того, каким образом удается уточнить месяц, содержащийся в заданной дате:
Корректировку объекта производят через set(). Данный пример помогает разобраться в принципах установки новой даты:
Сдвиг даты на тот или иной период производится через add():
А вот пример преобразований:
Здесь весьма полезными будут методы setTime() и getTime().
Класс TimeZone
TimeZone не позволяет «просто так» корректировать часы. Этот class используется только совместно с Calendar или DateFormat. Обладает следующими особенностями:
- относится к абстрактным – от него нельзя порождать объекты;
- для «порождения» применяется метод getDefault() – он возвращает экземпляр наследника с параметрами, скопированными из ОС;
- обладает статистическим методом getTimeZone, который отвечает за указание имени конкретного временного пояса;
- поля, отвечающие за параметризацию getTimeZone нигде не прописаны;
- присутствует статистический метод getAvailableIds(), который возвращает перечень возможных значений наименований временных зон типа string[];
- набор для параметризации может быть определен относительно Гринвича: string[] getAvailableIds(int offset).
Далее будет приведен образец программного кода, который последовательно поможет вывести на экран не часы, а временную зону по умолчанию, все варианты оного, а также те «территории», которые совпадают со временем «по Москве».
Выглядит этот код так:
import java.util.Arrays;
import java.util.TimeZone;
public class TimeZoneList
public static void main(String[] args) {
new TimeZoneList();
System.exit(0);
}
}
Данная кодификация работает так:
- Align – выравнивает отображение информации от «часов», заданных по Гринвичу;
- drawTimeZoneParam – параметры ТаймЗон;
- в конструкторе TimeZoneList определяется нынешняя TimeZone, далее осуществляется вывод всех вариантов, которые могут быть.
А еще метод getAvailableIDs позволит получить перечень TimeZone, у которых имеет место смещение по времени, совпадающее с текущей «территорией».
Всемирное координирование
В процессе программирования иногда недостаточно задействовать dates, days, time. Часто приходится пользоваться временным сдвигом, который относится к нестандартной деятельности человека. Пример – расписание поездов по России.
Для этого используется TimeZone UTC. UTC – это всемирное координирование времени. Заменяет Гринвич. В Джаве можно работать с Date для координации часов, но это – лишние манипуляции. При программировании они не нужны.
Ниже представлен наглядный пример применения TimeZone UTC. Здесь часы будут привязаны к одной из сторон (серверной), на компьютере устанавливаются различные «зональности». Для того, чтобы установить конкретный вариант, потребуется:
- обратиться к панели управления;
- открыть раздел «Data and Time»;
- выбрать TimeZone, которую хочется.
Код имеет следующую форму записи:
Применяются три TimeZone (current Zone). В двух вариантах (Москва и UTC) выводится в консоль:
- объект Data в состоянии «not formatted»;
- он же, но с форматирование и DateFormat/SimpleDateFormat.
Для того чтобы программа функционировала в конкретной временной зоне, требуется через SetDefault установить подходящий вариант в процессе обработки «времени».
В помощь программисту
Java позволяет работать с calendar day_of_week и другими параметрами календарного характера всем программистам. Чтобы облегчить понимание принципов взаимодействия, а также используемые formats и классы, стоит углубленно изучить Джаву.
Сделать это помогают специализированные курсы. Возможно очное и дистанционное обучение. Курсы рассчитаны на срок до года. По завершению выдаются сертификаты установленного образца. Во время занятий программерам объяснят, что такое формат даты, научат основам написания кодов на Джаве. Есть предложения не только для новичков, но и для тех, кто хочет улучшить свои навыки в Java. В процессе обучения можно общаться не только с коллегами, но и с опытными преподавателями.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Все о работе с календарными элементами в Java OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Программирование – это не только написание сложных кодовых структур. Рано или поздно каждый разработчик сталкивается с форматированием даты, а также времени. За реализацию подобных операций отвечают специализированные классы. Их довольно много, но на практике используются преимущественно два варианта. При помощи соответствующих классов в Java можно вычислять текущее время. Дополнительно программеры смогут задействовать для форматирования отдельный" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/vse-o-rabote-s-kalendarnymi-elementami-v-java/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#article","name":"\u0412\u0441\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 Java OTUS","headline":"\u0412\u0441\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 Java","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/11\/oj-1080x720-14.png","width":1080,"height":720},"datePublished":"2021-11-30T15:22:13+00:00","dateModified":"2021-11-30T15:22:14+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Java"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#listItem","position":2,"name":"\u0412\u0441\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 Java","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#webpage","url":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/","name":"\u0412\u0441\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 Java OTUS","description":"\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2013 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u0420\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0430\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0417\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b. \u0418\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 Java \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435\u0440\u044b \u0441\u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/11\/oj-1080x720-14.png","@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/#mainImage"},"datePublished":"2021-11-30T15:22:13+00:00","dateModified":"2021-11-30T15:22:14+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/2472" /><link rel='shortlink' href='https://otus.ru/journal/?p=2472' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-rabote-s-kalendarnymi-elementami-v-java%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-rabote-s-kalendarnymi-elementami-v-java%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-2472 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-2472" class="the-post post-2472 post type-post status-publish format-standard has-post-thumbnail category-polza tag-java">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Все о работе с календарными элементами в Java
</h1>
<a href="https://otus.ru/journal/vse-o-rabote-s-kalendarnymi-elementami-v-java/" class="date-link" data-wpel-link="internal"><time class="post-date">30 ноября, 2021</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Все о работе с календарными элементами в Java" title="Все о работе с календарными элементами в Java" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-14-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Java_%E2%80%93_%D1%87%D1%82%D0%BE_%D1%8D%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0" title="Java – что это такое: особенности языка">Java – что это такое: особенности языка</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81_%E2%80%93_%D1%87%D1%82%D0%BE_%D0%B7%D0%B0%D0%BF%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%BE%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B" title="Терминологический вопрос – что запомнить перед началом работы">Терминологический вопрос – что запомнить перед началом работы</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8F_%E2%80%93_%D1%81_%D1%87%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%BE%D0%B8%D1%82_%D0%B8%D0%BC%D0%B5%D1%82%D1%8C_%D0%B4%D0%B5%D0%BB%D0%BE" title="Разбор календаря – с чем предстоит иметь дело">Разбор календаря – с чем предстоит иметь дело</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_%D0%B2_Java_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%87%D0%B0%D1%81%D0%B0%D0%BC%D0%B8" title="Классы в Java для работы с часами">Классы в Java для работы с часами</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81_Date" title="Класс Date">Класс Date</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9E_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0%D1%85" title="О методах">О методах</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D0%B0%D1%81%D1%81_SimpleDateFormat" title="Подкласс SimpleDateFormat">Подкласс SimpleDateFormat</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B8%D0%BA%D0%B0_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA" title="Символика форматирования строк">Символика форматирования строк</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81_Calendar" title="Класс Calendar">Класс Calendar</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B" title="Методы">Методы</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9E_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B5_GregorianCalendar" title="О классе GregorianCalendar">О классе GregorianCalendar</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81_TimeZone" title="Класс TimeZone">Класс TimeZone</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Всемирное координирование">Всемирное координирование</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%92_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D1%83" title="В помощь программисту">В помощь программисту</a></li></ul></nav></div>
<p><strong>Программирование </strong>– это не только написание сложных кодовых структур. Рано или поздно каждый разработчик сталкивается с форматированием даты, а также времени. За реализацию подобных операций отвечают специализированные классы. Их довольно много, но на практике используются преимущественно два варианта.</p>
<p>При помощи соответствующих классов в Java можно вычислять текущее время. Дополнительно программеры смогут задействовать для форматирования отдельный class в Джаве. В данной статье будет рассказано об этих нюансах, а также об основах работы с календарем при создании приложений на Java.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Java_%E2%80%93_%D1%87%D1%82%D0%BE_%D1%8D%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0"></span>Java – что это такое: особенности языка<span class="ez-toc-section-end"></span></h2>
<p>Но перед этим стоит понять, нужно ли вообще разбираться в целых классах Джавы. Это не всегда простая задача, особенно для новичков.</p>
<p>Java – перспективный и современный язык программирования. Он предусматривает:</p>
<ul><li>простой для понимания и интерпретации синтаксис;</li><li>многофункциональность;</li><li>разнообразные инструменты для быстрого коддинга и создания крупных проектов;</li><li>наличие ООП.</li></ul>
<p>Писать на этом языке можно совершенно разные программы – и для работы, и для развлечений. Основное предназначение Java – работа с веб-утилитами. В них вопросы, связанные с датой и временем, иногда обостряются.</p>
<p>Отличительной особенностью Java является то, что это – универсальный кроссплатформенный язык. Перенести программу с одной платформы на другую не составит никакого труда. Данный вариант – отличный выбор как для новичка, так и для опытного программиста.</p>
<p>Внимание: большинство движков для создания игр поддерживают Джава-семейство.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81_%E2%80%93_%D1%87%D1%82%D0%BE_%D0%B7%D0%B0%D0%BF%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4_%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%BE%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B"></span>Терминологический вопрос – что запомнить перед началом работы<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы работать с текстом, а также объектами в программном коде, разработчик должен понимать, с чем он имеет дело. В программировании есть термины, без осознания которых создать собственное приложение и понять, как оно работает, невозможно.</p>
<p>Чтобы не запутаться в понятиях, рекомендуется запомнить следующие понятия:</p>
<ul><li>алгоритмы – свод правил и инструкций, предназначенных для решения определенных задач;</li><li>аргументы – значения, передаваемые в функции и команды;</li><li>переменные – элементарные «хранилища» информации;</li><li>объекты – сочетания связанных переменных, констант, а также иных сведений структурного характера, способные выбираться и обрабатываться совместно;</li><li>класс – набор связанных объектов с общими свойствами;</li><li>методы – список правил, определяющих возможности того или иного элемента кода;</li><li>цикл – неоднократное повторение одних и тех же манипуляций (части кодификации);</li><li>константа – неизменяемое в ходе выполнения утилиты значение;</li><li>массив – перечень/группы схожих типов информации, подлежащий группировке;</li><li>операнд – элемент, которым удается манипулировать через так называемые операторы;</li><li>оператор – объект в программном коде, позволяющий управлять операндами (пример – сложение или вычитание).</li></ul>
<p>Непосредственно с датой и часами перечисленные термины ничего общего не имеют, но предложенная вниманию информация будет полезна в процессе создания собственных приложений. Как тех, кто работают с часами, так и примитивных утилит. Это – база, которая пригодится любому программисту перед началом работы.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8F_%E2%80%93_%D1%81_%D1%87%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%BE%D0%B8%D1%82_%D0%B8%D0%BC%D0%B5%D1%82%D1%8C_%D0%B4%D0%B5%D0%BB%D0%BE"></span>Разбор календаря – с чем предстоит иметь дело<span class="ez-toc-section-end"></span></h2>
<p>Каждый современный человек знает, что такое календарь. Можно использовать форматирование calendar в своих приложениях при программировании. Это – весьма полезные опции, которые довольно легко реализовать на практике.</p>
<p>Пользователю предстоит работать со следующими элементами:</p>
<ul><li>какое сейчас/было число (день недели, конкретная дата (включая месяц));</li><li>часовой пояс;</li><li>время (час, минута, секунда).</li></ul>
<p>Для того, чтобы понять, какие объекты будут корректироваться и определяться, достаточно посмотреть на «часы» в операционной системе. Там отображается текущая дата, а также конкретное время.</p>
<p>Внимание: на компьютере соответствующая «часовая» информация – это определенное количество миллисекунд. При программировании подобные данные будут храниться в отдельном классе/файле.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_%D0%B2_Java_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D1%87%D0%B0%D1%81%D0%B0%D0%BC%D0%B8"></span>Классы в Java для работы с часами<span class="ez-toc-section-end"></span></h2>
<p>Для того, чтобы работать с форматом даты в Java, предстоит изучить несколько отдельных классов. Джава предусматривает их для того, чтобы использовать в приложениях и играх calendar.</p>
<p>На данный момент известны следующие варианты классов:</p>
<ul><li>Date;</li><li>Calendar;</li><li>TimeZone.</li></ul>
<p>Первый два – самостоятельные составляющие, которые относятся к библиотеке java.utill. Последний обособлено не задействуется.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81_Date"></span>Класс Date<span class="ez-toc-section-end"></span></h3>
<p>С января 1970 года хранит часы в миллисекундах. Класс обладает собственным конструктором по умолчанию. Он отвечает за конкретную операцию – возвращает текущее время.</p>
<p>Разработчики могут заняться созданием объекта Date при помощи конструктора, принимающего количество миллисекунд, начиная с 1970 года. Для того, чтобы уточнить внутреннее время, принято использовать методы класса Date под «названиями» setTime и getTime.</p>
<p>При применении класса Date осуществляется инициализация объекта. Дата и часы будут зависеть от задействованного конструктора. Всего их несколько:</p>
<ul><li>Date() — отвечает за часы и дату объекта на данный момент, «здесь и сейчас»;</li><li>Date(long millisec) – принятие аргумента, равного количеству миллисекунд, прошедших с начала 1.01.1970 года.</li></ul>
<p>В основном на практике встречается первый вариант. Чуть позже будет приведен наглядный пример того, как использовать дату и часы с соответствующим «элементом» программного кода.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0%D1%85"></span>О методах<span class="ez-toc-section-end"></span></h4>
<p>Date имеет множество разнообразных методов. Они отвечают за те или иные манипуляции. Ориентироваться можно на следующую информацию:</p>
<ol type="1"><li>Int compareTo(дата дата) – производит сравнение дат. Если они совпадают, значение возвращается к 0, отрицательным оно будет, если вызывающая дата более ранняя. В противном случае – значение положительное.</li><li>Boolean equals(object object) – при совпадении дат происходит возврат true.</li><li>Long GetTime() – указывает, сколько миллисекунд на момент отправки запроса прошло с 1 января 1970 года.</li><li>Void setTime(long milliseconds) – установка часов и даты в количестве миллисекунд, которые прошли с 1970-го.</li><li>Boolean after(date date) – когда объект содержит более позднюю дату, нежели прописано в параметре date, возвращается значение «истина».</li><li>Boolean before – аналогично предыдущему варианту, но true выходит, если объект включает в себя более ранее «значение».</li></ol>
<p>Все это помогает взаимодействовать с часами, а также с тем, какое сегодня/было когда-то число.</p>
<p>Вот пример вывода даты в консоль:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="319" height="61" src="https://otus.ru/journal/wp-content/uploads/2021/11/1-7.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2475" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/1-7.jpg 319w, https://otus.ru/journal/wp-content/uploads/2021/11/1-7-300x57.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/1-7-150x29.jpg 150w" sizes="(max-width: 319px) 100vw, 319px" /></figure>
<p>И наглядный образец применения GetTime():</p>
<figure class="wp-block-image size-large"><img decoding="async" width="354" height="89" src="https://otus.ru/journal/wp-content/uploads/2021/11/2-5.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2476" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/2-5.jpg 354w, https://otus.ru/journal/wp-content/uploads/2021/11/2-5-300x75.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/2-5-150x38.jpg 150w" sizes="(max-width: 354px) 100vw, 354px" /></figure>
<p>У рассматриваемого class есть подкласс, который тоже весьма активно применяется на практике. Он пригодится при непосредственном форматировании.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D0%B0%D1%81%D1%81_SimpleDateFormat"></span>Подкласс SimpleDateFormat<span class="ez-toc-section-end"></span></h3>
<p>SimpleDateFormat – это отдельный и удобный класс, который является своеобразным подклассом DateFormat. Позволяет отображать месяц, число и часы в том формате, который кажется пользователю наиболее удобным.</p>
<p>Чтобы лучше понимать принцип его работы, стоит рассмотреть наглядный пример кода:</p>
<pre class="wp-block-code"><code>package ru.test;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Test
{
public void test()
{
Date d = new Date();
SimpleDateFormat format1;
SimpleDateFormat format2;
format1 = new SimpleDateFormat(
"dd.MM.yyyy hh:mm");
format2 = new SimpleDateFormat(
"День dd Месяц MM Год yyyy Время hh:mm");
System.out.println(
format1.format(d) // 25.02.2013 09:03
);
System.out.println(
format2.format(d)
// День 25 Месяц 02 Год 2013 Время 09:03
);
}
}</code></pre>
<p>Для того, чтобы создать такой шаблон, пришлось использовать подобные параметры:</p>
<ul><li>dd – day;</li><li>MM – название месяца;</li><li>yyyy – год;</li><li>hh – часы;</li><li>mm – минуты.</li></ul>
<p>Под видом разделителя можно применять современно разный текст. Тот, что разработчику приходится по вкусу больше всего.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B8%D0%BA%D0%B0_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA"></span>Символика форматирования строк<span class="ez-toc-section-end"></span></h4>
<p>SimpleDateFormat – это подкласс DateFormat, который дает возможность определять собственные шаблоны для вывода на экран даты и времени. Для реализации поставленной задачи принято использовать определенные символьные записи.</p>
<p>К ним относят:</p>
<ul><li>A – AM или PM (актуально для часов в 12-часовом «формате»);</li><li>d – день месяца;</li><li>D – день года;</li><li>H – часы, которые работают в формате день/ночь;</li><li>K – «суточные» часы;</li><li>S – секунды;</li><li>M – минуты;</li><li>W – week of year;</li><li>y – год;</li><li>z – часовой пояс.</li></ul>
<p>То, сколько раз повторяется конкретный символ, указывает на способ представления календарной информации. Так можно использовать записи yyyy-mm-dd и hh:mm:ss или yy-mm-dd и h:m:s. В первом случае будет запись типа 1994-01-15 и 20:45:15. Во втором, если требуется, перед соответствующей цифрой будет выводиться дополнительный 0.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81_Calendar"></span>Класс Calendar<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы работать с календарной информацией, разработчику предоставляют разнообразные методы. Есть абстрактный класс Calendar, которые умеет работать в пределах календаря с датами. Он может прибавлять дни, а также принимать во внимание високосные года. Дополнительно преобразовывает время (миллисекунды) в более удобном пользователю формате.</p>
<p>Реализация Calendar производится классом GregorianCalendar. Как и у Data конструктор будет возвращать календарь на текущий день. Но здесь допустимо задавать его явным образом. Достаточно прописать все параметры оного:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="608" height="375" src="https://otus.ru/journal/wp-content/uploads/2021/11/3-5.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2477" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/3-5.jpg 608w, https://otus.ru/journal/wp-content/uploads/2021/11/3-5-300x185.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/3-5-150x93.jpg 150w" sizes="(max-width: 608px) 100vw, 608px" /></figure>
<p>Здесь:</p>
<ul><li>areFieldsSet – указатель на то, были ли заданы компоненты времени;</li><li>fields – массив целочисленных значений временных элементов;</li><li>isSet – массив вида Boolean, который указывает на наличие специфического компонента «часов»;</li><li>time (типа long) – текущее время элемента;</li><li>isTimeSet – указатель на установку текущих «часов».</li></ul>
<p>Данный вариант является весьма мощным, особенно если нужно вывести на экран полное название месяца или недели.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B"></span>Методы<span class="ez-toc-section-end"></span></h4>
<p>Для того, чтобы задействовать Calendar, необходимо запомнить следующие методы:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="847" height="473" src="https://otus.ru/journal/wp-content/uploads/2021/11/4-4.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2478" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/4-4.jpg 847w, https://otus.ru/journal/wp-content/uploads/2021/11/4-4-300x168.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/4-4-150x84.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/11/4-4-768x429.jpg 768w" sizes="(max-width: 847px) 100vw, 847px" /></figure>
<p>Формат даты можно менять при помощи соответствующего класса и различных типов данных. К ним относят следующие варианты:</p>
<ul><li>day_of_week – день недели;</li><li>day_of_year – день года;</li><li>day_of_month – месяц (день);</li><li>week_of_month – неделя месяца;</li><li>week_of_year – годовая неделя;</li><li>Year – год;</li><li>Calendar.ERA – эра.</li></ul>
<p>С Day_of_week предстоит взаимодействовать, если хочется на календаре или в приложении вывести название конкретного дня недели.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="525" height="399" src="https://otus.ru/journal/wp-content/uploads/2021/11/5-4.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2479" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/5-4.jpg 525w, https://otus.ru/journal/wp-content/uploads/2021/11/5-4-300x228.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/5-4-150x114.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/11/5-4-87x67.jpg 87w" sizes="(max-width: 525px) 100vw, 525px" /></figure>
<p>Это – наглядный пример того, как можно использовать перечисленные типы информации на практике.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B5_GregorianCalendar"></span>О классе GregorianCalendar<span class="ez-toc-section-end"></span></h3>
<p>Используя текущую дату в Java, можно столкнуться с подклассом Calendar, который носит название GregorianCalendar. Он представляет Григорианский календарь. При помощи метода getInstance() происходит возврат объекта GregorianCalendar, инициированный нынешней датой и часами согласно региональным параметрам.</p>
<p>Класс имеет поля AD и BC. Первый вариант – до нашей эры, второй – наша эра. И дополнительно здесь предусматривается метод isLeapYear(). Отвечает за проверку високосности года. Выглядит так:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="271" height="28" src="https://otus.ru/journal/wp-content/uploads/2021/11/6-3.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2480" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/6-3.jpg 271w, https://otus.ru/journal/wp-content/uploads/2021/11/6-3-150x15.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/11/6-3-260x28.jpg 260w" sizes="(max-width: 271px) 100vw, 271px" /></figure>
<p>При применении подобной «операции», происходит проверка. Когда год является високосным, программа возвращает значение true.</p>
<p>Промежутки времени, которые нужны программисту, могут быть получены через метод get(). Вот пример того, каким образом удается уточнить месяц, содержащийся в заданной дате:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="347" height="43" src="https://otus.ru/journal/wp-content/uploads/2021/11/7-3.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2481" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/7-3.jpg 347w, https://otus.ru/journal/wp-content/uploads/2021/11/7-3-300x37.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/7-3-150x19.jpg 150w" sizes="(max-width: 347px) 100vw, 347px" /></figure>
<p>Корректировку объекта производят через set(). Данный пример помогает разобраться в принципах установки новой даты:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="482" height="88" src="https://otus.ru/journal/wp-content/uploads/2021/11/8-3.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2482" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/8-3.jpg 482w, https://otus.ru/journal/wp-content/uploads/2021/11/8-3-300x55.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/8-3-150x27.jpg 150w" sizes="(max-width: 482px) 100vw, 482px" /></figure>
<p>Сдвиг даты на тот или иной период производится через add():</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="457" height="78" src="https://otus.ru/journal/wp-content/uploads/2021/11/9-3.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2483" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/9-3.jpg 457w, https://otus.ru/journal/wp-content/uploads/2021/11/9-3-300x51.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/9-3-150x26.jpg 150w" sizes="(max-width: 457px) 100vw, 457px" /></figure>
<p>А вот пример преобразований:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="446" height="59" src="https://otus.ru/journal/wp-content/uploads/2021/11/10-3.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2484" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/10-3.jpg 446w, https://otus.ru/journal/wp-content/uploads/2021/11/10-3-300x40.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/10-3-150x20.jpg 150w" sizes="(max-width: 446px) 100vw, 446px" /></figure>
<p>Здесь весьма полезными будут методы setTime() и getTime().</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81_TimeZone"></span>Класс TimeZone<span class="ez-toc-section-end"></span></h3>
<p>TimeZone не позволяет «просто так» корректировать часы. Этот class используется только совместно с Calendar или DateFormat. Обладает следующими особенностями:</p>
<ul><li>относится к абстрактным – от него нельзя порождать объекты;</li><li>для «порождения» применяется метод getDefault() – он возвращает экземпляр наследника с параметрами, скопированными из ОС;</li><li>обладает статистическим методом getTimeZone, который отвечает за указание имени конкретного временного пояса;</li><li>поля, отвечающие за параметризацию getTimeZone нигде не прописаны;</li><li>присутствует статистический метод getAvailableIds(), который возвращает перечень возможных значений наименований временных зон типа string[];</li><li>набор для параметризации может быть определен относительно Гринвича: string[] getAvailableIds(int offset).</li></ul>
<p>Далее будет приведен образец программного кода, который последовательно поможет вывести на экран не часы, а временную зону по умолчанию, все варианты оного, а также те «территории», которые совпадают со временем «по Москве».</p>
<p>Выглядит этот код так:</p>
<pre class="wp-block-code"><code>import java.util.Arrays;
import java.util.TimeZone;
public class TimeZoneList
</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="380" height="586" src="https://otus.ru/journal/wp-content/uploads/2021/11/11-1.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2485" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/11-1.jpg 380w, https://otus.ru/journal/wp-content/uploads/2021/11/11-1-195x300.jpg 195w, https://otus.ru/journal/wp-content/uploads/2021/11/11-1-97x150.jpg 97w" sizes="(max-width: 380px) 100vw, 380px" /></figure>
<pre class="wp-block-code"><code> public static void main(String[] args) {
new TimeZoneList();
System.exit(0);
}
}</code></pre>
<p>Данная кодификация работает так:</p>
<ul><li>Align – выравнивает отображение информации от «часов», заданных по Гринвичу;</li><li>drawTimeZoneParam – параметры ТаймЗон;</li><li>в конструкторе TimeZoneList определяется нынешняя TimeZone, далее осуществляется вывод всех вариантов, которые могут быть.</li></ul>
<p>А еще метод getAvailableIDs позволит получить перечень TimeZone, у которых имеет место смещение по времени, совпадающее с текущей «территорией».</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B5_%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"></span>Всемирное координирование<span class="ez-toc-section-end"></span></h4>
<p>В процессе программирования иногда недостаточно задействовать dates, days, time. Часто приходится пользоваться временным сдвигом, который относится к нестандартной деятельности человека. Пример – расписание поездов по России.</p>
<p>Для этого используется TimeZone UTC. UTC – это всемирное координирование времени. Заменяет Гринвич. В Джаве можно работать с Date для координации часов, но это – лишние манипуляции. При программировании они не нужны.</p>
<p>Ниже представлен наглядный пример применения TimeZone UTC. Здесь часы будут привязаны к одной из сторон (серверной), на компьютере устанавливаются различные «зональности». Для того, чтобы установить конкретный вариант, потребуется:</p>
<ul><li>обратиться к панели управления;</li><li>открыть раздел «Data and Time»;</li><li>выбрать TimeZone, которую хочется.</li></ul>
<p>Код имеет следующую форму записи:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="500" height="553" src="https://otus.ru/journal/wp-content/uploads/2021/11/12-1.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2486" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/12-1.jpg 500w, https://otus.ru/journal/wp-content/uploads/2021/11/12-1-271x300.jpg 271w, https://otus.ru/journal/wp-content/uploads/2021/11/12-1-136x150.jpg 136w" sizes="(max-width: 500px) 100vw, 500px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="425" height="324" src="https://otus.ru/journal/wp-content/uploads/2021/11/13.jpg" alt="Все о работе с календарными элементами в Java" class="wp-image-2487" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/13.jpg 425w, https://otus.ru/journal/wp-content/uploads/2021/11/13-300x229.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/11/13-150x114.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/11/13-87x67.jpg 87w" sizes="(max-width: 425px) 100vw, 425px" /></figure>
<p>Применяются три TimeZone (current Zone). В двух вариантах (Москва и UTC) выводится в консоль:</p>
<ul><li>объект Data в состоянии «not formatted»;</li><li>он же, но с форматирование и DateFormat/SimpleDateFormat.</li></ul>
<p>Для того чтобы программа функционировала в конкретной временной зоне, требуется через SetDefault установить подходящий вариант в процессе обработки «времени».</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D1%83"></span>В помощь программисту<span class="ez-toc-section-end"></span></h2>
<p>Java позволяет работать с calendar day_of_week и другими параметрами календарного характера всем программистам. Чтобы облегчить понимание принципов взаимодействия, а также используемые formats и классы, стоит углубленно изучить Джаву.</p>
<p>Сделать это помогают специализированные курсы. Возможно очное и дистанционное обучение. Курсы рассчитаны на срок до года. По завершению выдаются сертификаты установленного образца. Во время занятий программерам объяснят, что такое формат даты, научат основам написания кодов на Джаве. Есть предложения не только для новичков, но и для тех, кто хочет улучшить свои навыки в Java. В процессе обучения можно общаться не только с коллегами, но и с опытными преподавателями.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/java-specialization/?utm_source=oj&utm_medium=affilate&utm_campaign=java_bandle" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/11/JavaSpec_Welcome_970x90-7.png" alt="Все о работе с календарными элементами в Java" class="wp-image-2474" srcset="https://otus.ru/journal/wp-content/uploads/2021/11/JavaSpec_Welcome_970x90-7.png 970w, https://otus.ru/journal/wp-content/uploads/2021/11/JavaSpec_Welcome_970x90-7-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/11/JavaSpec_Welcome_970x90-7-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/11/JavaSpec_Welcome_970x90-7-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/java/" rel="tag" data-wpel-link="internal">Java</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-rabote-s-kalendarnymi-elementami-v-java%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-rabote-s-kalendarnymi-elementami-v-java%2F&text=%D0%92%D1%81%D0%B5%20%D0%BE%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5%20%D1%81%20%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D0%BD%D1%8B%D0%BC%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%20%D0%B2%20Java" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-rabote-s-kalendarnymi-elementami-v-java%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-rabote-s-kalendarnymi-elementami-v-java%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2021%2F11%2Foj-1080x720-14.png&description=%D0%92%D1%81%D0%B5%20%D0%BE%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5%20%D1%81%20%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D0%BD%D1%8B%D0%BC%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BC%D0%B8%20%D0%B2%20Java" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/java-i-fajly-chto-dolzhen-znat-uspeshnyj-programmist/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/java-i-fajly-chto-dolzhen-znat-uspeshnyj-programmist/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Java и файлы: что должен знать успешный программист" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-13-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Java и файлы: что должен знать успешный программист" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/java-i-fajly-chto-dolzhen-znat-uspeshnyj-programmist/" data-wpel-link="internal">Java и файлы: что должен знать успешный программист</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/java-i-fajly-chto-dolzhen-znat-uspeshnyj-programmist/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-11-30T15:02:00+00:00">30 ноября, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/gejmdev-opredelenie-zarabotok-napravleniya/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/gejmdev-opredelenie-zarabotok-napravleniya/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Геймдев: определение, заработок, направления" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/11/oj-1080x720-15-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Геймдев: определение, заработок, направления" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/gejmdev-opredelenie-zarabotok-napravleniya/" data-wpel-link="internal">Геймдев: определение, заработок, направления</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/gejmdev-opredelenie-zarabotok-napravleniya/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-11-30T15:42:49+00:00">30 ноября, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">4 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/vse-o-rabote-s-kalendarnymi-elementami-v-java\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 15:00:32 GMT -->