Что означает текущая дата
Урок 76. Текущая дата
Приближается Новый год. Наши документы в полном порядке. На титульном листе красуется текущий год, то есть актуальная дата. А после новогодних каникул нас поджидает такая мелкая неприятность: Новый год наступил, а на документах осталась прежняя дата. Не знаю как вы, а мне до марта месяца попадаются документы, в которых надо исправить год и не в одном месте – год издания, дата утверждения, может быть и дата согласования.
По окончании этого урока вы сможете:
Урок 30 «Список иллюстраций». В нём дала определение понятия «Поле»:
Понять и запомнить! | Поле – это зарезервированный участок в документе, который отображает изменения определённого типа в документе. |
Каждое поле имеет свою ограниченную функцию и свой код (а вот о кодах полей много-много позже). Например, поле Оглавление, поле Номер страницы, поле Дата.
Преимущество использования полей состоит в том, что вставленное содержимое (дата, номер страницы, оглавление и т.п.) обновляется автоматически при каждом изменении. Например, если вы работаете над документом в течение нескольких дней, то поле «Time» (текущая дата) будет изменяться каждый день.
Откройте документ с красиво оформленным титульным листом (Урок 42. «Титульный лист»). Можете открыть учебный файл, который можно скачать тут.
1. Вставка поля «Дата»
Шаг 1. Определимся с местами вставки поля «Дата»:
Хорошо еще, что нет ещё и года согласования.
Обе даты находятся в колонтитулах, все согласно уроку 42.
Входим в колонтитулы (урок 38 и урок 43) и определяем место вставки поля, которое будет определять актуальный год:
Шаг 2. Вставляем поле «Дата» (лента Вставка → группа команд Текст → команда Экспресс-блоки → команда Поле… из выпадающего меню):
Появляется очень интересное диалоговое окно «Поле»:
Шаг 3. Выбираем категорию «Дата и Время»:
Как мы видим, нет такого формата – текущий год. Решаем эту проблему.
Шаг 4. Смотрим коды поля и параметры поля:
Смотрим самый первый ключ. Простая логика нам подсказывает:
Шаг 5. Добавляем первый ключ в поле «Код поля» и аккуратно стираем «dd.MM»:
Шаг 6. Говорим ОК и ещё раз ОК и любуемся результатом:
Я допечатала «г.», чтобы никто не забыл, что это год.
Если вы щелкните по введённому полю, то увидите такую картину:
Поле по щелчку ЛМ окрашивается в серый цвет, поле окружает рамка с надписью «Обновить». Сохраните этот документ. Если вы откроете этот документ 1 января 2022 года, то вы увидите, что поле поменяло свое значение на «2022».
Для нижнего колонтитула вы можете повторить предыдущие шаги, а можно сделать проще.
Шаг 7. Копируем поле с текущим годом в буфер обмена → в нижнем колонтитуле находим место вставки из буфера обмена → вставляем → всё!
Причем я выделила и скопировала не только поле, а все содержимое ячейки (урок 51 «Таблица. Начало пути»). Потом я назначила полужирное начертание этому абзацу. Всё это никак не отразится кодах поля «Дата».
Как бы домашнее задание. Создайте шаблон служебной записки и вставьте поле «Дата» в полном формате:
Каждый раз при создании документа на основе этого шаблона в поле будет отражаться текущая дата. Порадуйте начальство!
Работа с датами на языке R (базовые возможности, а также пакеты lubridate и timeperiodsR)
Получить текущую дату в любом языке программирования, операция эквивалентная «Hello world!». Язык R не является исключением.
В этой статье мы разберёмся с тем, как устроена работа с датами в базовом синтаксисе языка R, а также рассмотрим несколько полезных пакетов, расширяющих его возможности при работе с датами:
Содержание
Если вы интересуетесь анализом данных, и в частности языком R, возможно вам будут интересны мои telegram и youtube каналы. Большая часть контента которых посвящена языку R.
Работа с датами в базовом синтаксисе R
Преобразование текста в дату
В базовом R присутствует набор функций для работы с датами. Минус базового синтаксиса заключается в том, что регистр имён и аргументов функций очень разрознен, и практически не имеет логической связи. Тем не менее, базовые функции языка надо знать, поэтому начнём мы именно с них.
format принимает в строковом виде операторы обозначающие какой-либо временной интервал и его формат, наиболее часто используемые значения приведены в таблице ниже:
Бывают ситуации, когда вы получаете дату не только не соответствующую стандартным форматам (ГГГГ-ММ-ДД или ГГГГ/ММ/ДД), но ещё и на языке, который отличается от установленного в вашей операционной системе по умолчанию. Например, вы загрузили данные, где дата указана вот в таком виде: «Декабрь 15, 2019 г.». Перед конвертацией этой строки в дату вам необходимо поменять локаль.
Извлечение компонентов даты в базовом R
В базовом R не так много функций позволяющих извлекать какую либо часть даты из объекта класса Date.
Помимо основного класса объектов Date в базовом R есть ещё 2 типа данных которые хранят отметку времени: POSIXlt, POSIXct. Основное отличие этих классов от Date заключается в том, что кроме даты они хранят время.
Функция Sys.time() возвращает текущую дату и время в формате POSIXct. Этот формат по смыслу похож на UNIXTIME, и хранит в себе количество секунд с момента начала эры UNIX (полночь (по UTC) с 31 декабря 1969 года на 1 января 1970).
Класс POSIXlt так же хранит в себе время и дату, и все их компоненты. Поэтому является объектом с более сложной структурой, но из которого легко получить любой компонент даты и времени т.к. по сути POSIXlt это list.
Если ваши данные о дате и времени представлены в UNIXTIME, то для их конвертации в понятную, читаемую дату используйте следующий пример:
В origin вы можете указать любую временную метку. Например, если в ваших данных дата и время указаны как количество секунд начиная от 15 сентября 2019 года 12:15, то для преобразования их в дату используйте:
Работа с датами с помощью пакета lubridate
lubridate пожалуй самый популярный пакет для работы с датами на языке R. Он предоставляет вам дополнительно ещё три класса.
Установка пакета lubridate :
Преобразование текста в дату с помощью lubridate
Функции пакета lubridate значительно упрощают процесс конвертации текста в дату, а так же позволяют вам проводить любые арифметические операции с датами и временем.
Для преобразования строки в дату в lubridate есть целое семейство функций имена которых состоят всегда из трёх букв, и обозначают последовательность компонентов даты:
Несколько примеров для преобразования строк в даты:
Как видите lubridate значительно более эффективно умеет распознавать описание дат в виде текста, и позволяет вам преобразовывать текст в дату не используя дополнительных операторов для описания формата.
Извлечение компонентов дат с помощью пакета lubridate
Также с помощью lubridate можно получить любой компонент из даты:
Арифметические операции с датами
Но, наиболее важный и основной функционал lubridate заключается в возможности производить различные арифметические операции с датами.
Округление даты осуществляется тремя функциями:
Каждая из этих функций имеет аргумент unit, который позволяет вам указать единицу округления: second, minute, hour, day, week, month, bimonth, quarter, season, halfyear, year
Итак, давайте разберёмся с тем, как получить дату, которая будет через 8 дней после текущей даты и проводить различные другие арифметические вычисления между двумя датами.
Упрощённая работа с периодами, пакет timeperiodsR.
timeperiodsR — свежий пакет для работы с датами который был опубликован на CRAN в сентябре 2019 года.
Установка пакета timeperiodsR :
Основное назначение — быстрое определение некоторого временного интервала относительно заданной даты. Например с помощью его функций вы легко можете:
Название всех функций пакета timeperiodsR интуитивно понятны, и состоят из двух частей: направление_интервал, где:
Временные интервалы в timeperiodsR
Эти функции полезны в случаях, когда вам необходимо строить отчёты на основе данных за прошлую неделю или месяц. Чтобы получить прошлый месяц воспользуйтесь одноимённой функцией previous_month() :
После чего у вас будет объект prmonth класса tpr, из которого легко можно получить следующие компоненты:
Причём получить каждый из компонентов можно разными способами:
Также вы можете получить любой из компонентов используя аргумент part, который присутствует в каждой из функций пакета. Возможные значения: start, end, sequence, length.
Итак, давайте рассмотрим все аргументы доступные в функциях пакета timeperiodsR :
Таким образом, вы можете вычислять любой временной период относительно текущей, либо любой другой заданной даты, приведу ещё несколько примеров:
6 октября это воскресенье:
Нам необходим период, который относительно 6 октября возьмёт 3 предыдущие недели. Не включая неделю, в которую входит само 6 октября. Соответственно это период с 9 по 29 сентября.
В этом примере нас интересует месяц, который был 4 месяца назад, если отталкиваться от 16 сентября 2019 года, соответственно это был май 2019 года.
Фильтрация вектора дат с помощью timeperiodsR
Для фильтрации дат в timeperiodsR есть несколько операторов:
У пакета timeperiodsR есть официальный, русскоязычный плейлист на YouTube.
Заключение
Если вам интересен язык R приглашаю вас подписаться на мой телеграмм канал R4marketing, в котором я на ежедневной основе делюсь полезными материалами о применении языка R в решении своих повседневных задач.
Правильная работа с датой и временем
Практически все проекты сталкиваются с проблемами, вызванными неправильной обработкой и хранением даты и времени. Даже если проект используется в одном часовом поясе, все равно после перехода на зимнее/летнее время можно получить неприятные неожиданности. При этом мало кто озадачивается реализацией правильного механизма со старта, потому что кажется, что с этим проблем быть не может, так как все тривиально. К сожалению, в последствии реальность показывает, что это не так.
Логически можно выделить следующие типы значений, относящиеся к дате и времени:
Дата и время
Допустим, лаборатория, которая собрала материал для анализа находится в часовом поясе +2, а центральный филиал, в котором следят за своевременным выполнением анализов — в поясе +1. Время, приведенное в примере, было отмечено при сборе материала первой лабораторией. Возникает вопрос — какую цифру времени должен увидеть центральный офис? Очевидно, что программное обеспечение центрального офиса должно показывать 15 января 2014 года 12:17:15 — на час меньше, так как по их часам событие произошло именно в этот момент.
Рассмотрим одну из возможных цепочек действий, через которую проходят данные с клиента на сервер и обратно, позволяющую всегда корректно отображать дату/время согласно текущему часовому поясу клиента:
Правила перевода на летнее/зимнее время — вещь, строго говоря, переменная. Разные страны могут иногда менять свои правила, и эти изменения должны быть заблаговременно заложены в обновления системы. На практике неоднократно встречались ситуации некорректной работы этого механизма, которые по итогу решались установкой хотфиксов либо операционной системы, либо используемых сторонних библиотек. Вероятность повторения тех же проблем — не нулевая, поэтому лучше иметь способ гарантированно их избежать.
Учитывая описанные выше соображения, сформулируем как можно более надежный и простой подход к передаче и хранению времени: на сервере и в базе данных все значения должны быть приведены к часовому поясу UTC.
Рассмотрим, что нам дает такое правило:
Как видно из вышесказанного, не существует единого подхода, покрывающего 100% случаев. Поэтому сперва нужно четко понять из требований, какие из упомянутых выше ситуаций будут в вашей системе. С большой вероятностью, все ограничится первым предложенным подходом с хранением в UTC. Ну а описанные исключительные ситуации его не отменяют, а просто добавляют другие решения для частных случаев.
Дата без времени
Допустим, с правильным отображением даты и времени с учетом часового пояса клиента разобрались. Перейдем к датам без времени и примеру, указанному для этого случая в начале — «новый контракт вступает в силу 2 февраля 2016 года». Что будет, если для таких значений использовать те же типы и тот же механизм, что и для «обычных» даты с временем?
Есть несколько способов избежать преобразование для дат:
Временной интервал
С хранением и обработкой временных интервалов все просто: их величина не зависит от часового пояса, поэтому никаких особых рекомендаций здесь нет. Их можно хранить и передавать как количество единиц времени (целое или с плавающей точкой, в зависимости от необходимой точности). Если важна секундная точность — то как количество секунд, если миллисекундная — то как количество миллисекунд и т.д.
А вот вычисление интервала может иметь подводные камни. Предположим, у нас есть типовой код на C#, который считает интервал времени между двумя событиями:
На первый взгляд, никаких проблем здесь нет, но это не так. Во-первых, могут возникнуть проблемы с юнит-тестированием такого кода, но об этом мы поговорим чуть позже. Во-вторых, давайте представим, что начальный момент времени пришелся на зимнее время, а конечный — на летнее (например, таким образом замеряется количество рабочих часов, а у работников есть ночная смена).
Предположим, код работает в часовом поясе, в котором переход на летнее время в 2016 году происходит в ночь 27 марта, и смоделируем описанную выше ситуацию:
Этот код даст в результате 9 часов, хотя фактически между этими моментами прошло 8 часов. В этом легко убедиться, изменив код вот таким образом:
Отсюда вывод — любые арифметические операции с датой и временем нужно делать, используя либо UTC значения, либо типы, хранящие информацию о часовом поясе. А потом обратно переводить в локальные в случае надобности. С этой точки зрения, изначальный пример легко исправить, поменяв DateTime.Now на DateTime.UtcNow.
Этот нюанс не зависит от конкретной платформы или языка. Вот аналогичный код на Java, имеющий тот же недостаток:
Исправляется он также легко — например, использованием ZonedDateTime вместо LocalDateTime.
Расписание запланированных событий
Расписание запланированных событий – более сложная ситуация. Универсального типа, позволяющего хранить расписания, в стандартных библиотеках нет. Но такая задача возникает не так уж редко, поэтому готовые решения можно найти без проблем. Хорошим примером является формат планировщика cron, который в том или ином виде используется другими решениями, например, Quartz: http://quartz-scheduler.org/api/2.2.0/org/quartz/CronExpression.html. Он покрывает практически все нужды составления расписаний, включая варианты типа «вторая пятница месяца».
В большинстве случаев писать свой планировщик не имеет смысла, так как существуют гибкие проверенные временем решения, но если по какой-то причине есть надобность в создании своего механизма, то как минимум формат расписания можно позаимствовать у cron.
Общие рекомендации
Помимо описанных выше рекомендаций, посвященных хранению и обработке разнотипных значений времени, есть еще несколько других, о которых тоже хотелось бы сказать.
Во-первых, по поводу использования статических членов класса для получения текущего времени — DateTime.UtcNow, ZonedDateTime.now() и т.д. Как и было сказано, использование их напрямую в коде может серьезно усложнить юнит-тестирование, так как без специальных мок фреймворков подменить текущее время не получится. Поэтому, если вы планируете писать юнит тесты, следует позаботиться о том, чтобы реализацию таких методов можно было подменить. Для решения этой задачи есть как минимум два способа:
Второй нюанс с получением текущего времени — это то, что клиенту доверять нельзя. Текущее время на компьютерах пользователей может очень сильно отличаться от реального, и если есть логика, завязанная на него, то эта разница может все испортить. Все места, где есть необходимость получать текущее время, должны по возможности выполняться на стороне сервера. И, как уже было сказано ранее, все арифметические операции с временем должны производиться либо в UTC значениях, либо с использованием типов, хранящих смещение часового пояса.
И еще одна вещь, которую хотелось упомянуть — это стандарт ISO 8601, описывающий формат даты и времени для обмена информацией. В частности, строковое представление даты и времени, используемое при сериализации, должно соответствовать этому стандарту для предотвращения потенциальных проблем с совместимостью. На практике крайне редко приходится самому реализовывать форматирование, поэтому сам стандарт может быть полезен в основном в ознакомительных целях.
Дата и время
Содержание
Java предоставляет класс Date, который доступен в пакете java.util, этот класс заключает в себе текущую дату и время.
Конструкторы
Класс Date поддерживает два конструктора, которые показаны ниже.
№ | Конструктор и описание |
1 | Date() Этот конструктор инициализирует объект с текущей датой и временем. |
2 | Date(long millisec) Этот конструктор принимает аргумент равный числу миллисекунд, истекших с полуночи 1 января 1970 г. |
Методы класса Date
Ниже представлены методы класса Date.
№ | Методы с описанием |
1 | boolean after(Date date) Возвращает значение true, если вызывающий объект date содержит дату, которая раньше заданной даты, в противном случае он возвращает значение false. |
2 | boolean before(Date date) Возвращает значение true, если вызывающий объект date содержит дату, более раннюю, чем заданная дата, в противном случае он возвращает значение false. |
3 | Object clone() Дублирование вызывающего объекта date. |
4 | int compareTo(Date date) Сравнивает значение вызывающего объекта с этой датой. Возвращает 0, если значения равны. Возвращает отрицательное значение, если объект вызова является более ранним, чем дата. Возвращает положительное значение, если объект вызова позже даты. |
5 | int compareTo(Object obj) Работает точно так же compareTo(Date), если объект вызова имеет класс Date. В противном случае вызывает ClassCastException. |
6 | boolean equals(Object date) Возвращает значение true, если вызывающий объект date содержит то же время и дату, которая указана в date, в противном случае он возвращает значение false. |
7 | long getTime() Возвращает количество миллисекунд, истекших с 1 января 1970 года. |
8 | int hashCode() Возвращает хэш-код для вызывающего объекта. |
9 | void setTime(long time) Задает дату и время, соответствующие моменту времени, что представляет собой общее затраченное время в миллисекундах от полуночи 1 января 1970 года. |
10 | String toString() Преобразует вызывающий объект date в строку и возвращает результат. |
Текущая дата и время в Java
Получить текущую дату и время в Java достаточно не трудно. Вы можете использовать простой объект date вместе с методом toString(), чтобы вывести текущую дату и время следующим образом:
Получим следующий результат:
Сравнение дат
Существуют три способа в Java сравнить даты:
Форматирование даты с помощью SimpleDateFormat
SimpleDateFormat — это конкретный класс для парсинга и форматирования даты в Java. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени. Например:
Получим следующий результат:
Формат-коды SimpleDateFormat
Для того, чтобы задать в Java формат даты и времени, используйте строковый шаблон (регулярные выражения) с датой и временем. В этой модели все буквы ASCII зарезервированы как шаблон письма, которые определяются следующим образом:
Символ | Описание | Пример |
G | Обозначение эры | н.э. |
y | Год из четырех цифр | 2016 |
M | Номер месяца года | 11 |
d | Число месяца | 13 |
h | Формат часа в A.M./P.M.(1 12) | 7 |
H | Формат часа(0 23) | 19 |
m | Минуты | 30 |
s | Секунды | 45 |
S | Миллисекунды | 511 |
E | День недели | Вс |
D | Номер дня в году | 318 |
F | Номер дня недели в месяце | 2 (второе воскресение в этом месяце) |
w | Номер неделя в году | 46 |
W | Номер недели в месяце | 2 |
a | Маркер A.M./P.M. | AM |
k | Формат часа(1 24) | 24 |
K | Формат часа в A.M./P.M.(0 11) | 0 |
z | Часовой пояс | FET (Дальневосточноевропейское время) |
‘ | Выделение для текста | Текст |
» | Одинарная кавычка | ‘ |
Форматирование даты с помощью printf
Формат даты и времени можно сделать без труда с помощью метода printf. Вы используете формат двух букв, начиная с t и заканчивая одним из символов в таблице, приведенных ниже. Например:
Получим следующий результат:
Было бы немного глупо, если Вы должны были бы поставить дату несколько раз для форматирования каждой части. По этой причине формат строки может указывать индекс аргумента для форматирования.
Получим следующий результат:
Получим следующий результат:
Символы преобразования даты и времени
В Java вывод даты в нужном формате можно реализовать с помощью следующих символов преобразования:
Символ | Описание | Пример |
c | Текущее время и дата | Вс ноя 13 01:19:27 FET 2016 |
F | Формат даты ISO 8601 (год-месяц-день) | 2016-11-13 |
D | Американский формат даты (месяц/день/год) | 11/13/16 |
T | 24-часовой формат времени | 01:26:09 |
r | 12-часовой формат времени | 01:26:51 AM |
R | 24-часовой формат времени без секунд | 01:27 |
Y | Текущий год из четырех цифр (с ведущими нулями) | 2016 |
y | Последние две цифры года (с ведущими нулями) | 16 |
C | Первые две цифры года (с ведущими нулями) | 20 |
B | Полное название месяца | ноября |
b | Сокращенное название месяца | ноя |
m | Номер текущего месяца (с ведущими нулями) | 11 |
d | Номер текущего дня месяца (с ведущими нулями) | 09 |
e | Номер текущего дня месяца (без ведущих нулей) | 9 |
A | Полное название текущего дня недели | воскресенье |
a | Сокращенное название дня недели | Вс |
j | Количество дней с начала года (с ведущими нулями) | 318 |
H | Формат часа (с ведущими нулями), от 00 до 23 | 01 |
k | Формат часа (без ведущих нулей), от 0 до 23 | 1 |
I | Формат часа (с ведущими нулями), от 01 до 12 | 01 |
l | Формат часа (без ведущих нулей), от 1 до 12 | 1 |
M | Минуты (с ведущими нулями) | 38 |
S | Секунды (с ведущими нулями) | 50 |
L | Миллисекунды (с ведущими нулями) | 382 |
N | Наносекунды (с ведущими нулями) | 775000000 |
p (%Tp) | Верхний регистр маркера A.M./P.M. | AM |
p (%tp) | Нижний регистр маркера A.M./P.M. | am |
z | Часовое смещение RFC 822 по GMT | +0300 |
Z | Часовой пояс | FET |
s | Секунды, начиная с 1970-01-01 00:00:00 GMT | 1478991147 |
Q | Миллисекунды, начиная с 1970-01-01 00:00:00 GMT | 1478991172134 |
Есть и другие полезные классы, связанные с датой и временем. Для получения более подробной информации обратитесь к стандартной документации Java.
Преобразование строки в дату
Класс SimpleDateFormat имеет некоторые дополнительные методы, в частности parse(), который в Java поможет нам перевести строку в дату соответствии с форматом, хранящимся в данном объекте SimpleDateFormat. Например:
Получим следующий результат:
Задержка по времени
Вы можете увеличить или уменьшить время работы программы на любой период времени, от одной миллисекунды до срока службы вашего компьютера. Например, следующая программа будет находится в режиме ожидания в течение 10 секунд:
Получим следующий результат:
Вместо Thread.sleep() рекомендуется использовать TimeUnit(): TimeUnit.NANOSECONDS.sleep(), TimeUnit.MICROSECONDS.sleep(), TimeUnit.MILLISECONDS.sleep(), TimeUnit.SECONDS.sleep(), TimeUnit.MINUTES.sleep(), TimeUnit.HOURS.sleep() или TimeUnit.DAYS.sleep().
Время выполнения программы
Довольно просто можно узнать время выполнения кода вашей программы с помощью System.currentTimeMillis(). Для этого необходимо в начале программы записать в переменную значение System.currentTimeMillis(), а в конце вычесть из текущего значения System.currentTimeMillis() переменную, записанную вначале. Рассмотрим пример, в котором измерим скорость работы кода программы, которая выводит 10 случайных чисел на экран.
Получим следующий результат:
Разница дат в Java
Иногда Вам может понадобиться рассчитать разницу между датами, измерить точку во времени в миллисекундах. Поэтому давайте перепишем еще раз пример, находящийся выше:
Получим следующий результат:
Количество дней между датами
А иногда Вам может понадобиться в Java узнать количество дней, часов, минут и т.п. между датами. Рассмотрим один из способов нахождения дней между двумя датами ниже в примере:
Получим следующий результат:
Класс GregorianCalendar
GregorianCalendar является конкретной реализацией класса Calendar, который отображает обычный григорианский календарь, с которым Вы знакомы. Мы не обсуждали класс Calendar в этом учебнике, для этого Вы можете посмотреть стандартную документацию Java.
Метод getInstance() Calendar возвращает GregorianCalendar, который инициализирован по умолчанию текущей датой и временем, локализацией и часовым поясом. GregorianCalendar определяет два поля: н. э и до н. э. Они представляют собой две эпохи, которые определяются по григорианскому календарю.
Существует несколько конструкторов для объектов GregorianCalendar:
№ | Конструктор и его описание |
1 | GregorianCalendar() Создает значение GregorianCalendar, используя по умолчанию текущей датой и временем, локализацией и часовым поясом. |
2 | GregorianCalendar(int year, int month, int date) Создает GregorianCalendar в соответствии с заданной датой в часовом поясе и локализацией по умолчанию. |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) Создает GregorianCalendar в соответствии с заданной датой и временем в часовом поясе и локализацией по умолчанию. |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Создает GregorianCalendar в соответствии с заданной датой и временем в часовом поясе и локализацией по умолчанию. |
5 | GregorianCalendar(Locale aLocale) Создает GregorianCalendar в соответствии с текущим временем в часовом поясе по умолчанию в рамках заданной локализации. |
6 | GregorianCalendar(TimeZone zone) Конструирует GregorianCalendar, основанный на текущем времени в данной зоне времени с локализацией по умолчанию. |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) Конструирует GregorianCalendar, основанный на текущем времени в заданном часовом поясе и локализации. |
Список нескольких полезных методов, предоставляемых классом GregorianCalendar:
№ | Методы с описанием |
1 | void add(int field, int amount) Добавляет указанное количество времени в данное временное поле в соответствии с правилами календаря. |
2 | protected void computeFields() Преобразует время по Гринвичу в миллисекунды до значения полей времени. |
3 | protected void computeTime() Преобразует значения временного поля Календаря в UTC формате в миллисекундах. |
4 | boolean equals(Object obj) Сравнивает этот GregorianCalendar эталонным объектом. |
5 | int get(int field) Получает значение для поля заданного времени. |
6 | int getActualMaximum(int field) Возвращает максимальное значение, которое это поле может иметь, учитывая текущую дату. |
7 | int getActualMinimum(int field) Возвращает минимальное значение, которое это поле может иметь, учитывая текущую дату. |
8 | int getGreatestMinimum(int field) Возвращает наибольшее минимальное значение для данного поля, если изменяется. |
9 | Date getGregorianChange() Получает изменения даты по григорианскому календарю. |
10 | int getLeastMaximum(int field) Возвращает минимально максимальное значение для данного поля, если изменяется. |
11 | int getMaximum(int field) Возвращает максимальное значение для данного поля. |
12 | Date getTime() Определяет текущее время в соответствии с календарем. |
13 | long getTimeInMillis() Получает текущее время по Календарю как длительное. |
14 | TimeZone getTimeZone() Возвращает часовой пояс. |
15 | int getMinimum(int field) Возвращает минимальное значение для данного поля. |
16 | int hashCode() Переопределите хэш-код. |
17 | boolean isLeapYear(int year) Определяет, является ли год високосным. |
18 | void roll(int field, boolean up) Добавление или вычитание (вверх/вниз) одной единицы времени в данном временном поле без изменений в больших полях. |
19 | void set(int field, int value) Устанавливает временное поле с заданным значением. |
20 | void set(int year, int month, int date) Задает значения для поля год, месяц и дата. |
21 | void set(int year, int month, int date, int hour, int minute) Задает значения для поля год, месяц, дату, час и минуту. |
22 | void set(int year, int month, int date, int hour, int minute, int second) Задает значения для поля год, месяц, дату, час, минуту и секунду. |
23 | void setGregorianChange(Date date) Устанавливает дату изменения грегорианского календаря. |
24 | void setTime(Date date) Устанавливает в соответствии с данным календарем текущее время с заданной датой. |
25 | void setTimeInMillis(long millis) Устанавливает в соответствии с данным календарем текущее время от заданного long значения. |
26 | void setTimeZone(TimeZone value) Задает часовой пояс со значением заданного часового пояса. |
27 | String toString() Возвращает строковое представление календаря. |
Пример 1: вывод текущей даты и времени, високосный год
Получим следующий результат:
Для изучения полного списка констант в классе календаря обратитесь к стандартной документации Java.
Пример 2: получить день недели по дате
Получим следующий результат: