toWeek(date[, mode][, timezone])
Переводит дату-с-временем или дату в число UInt8, содержащее номер недели. Второй аргументам mode задает режим, начинается ли неделя с воскресенья или с понедельника и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, то используется режим 0.
эквивалентно .
Описание режимов (mode):
Mode | Первый день недели | Диапазон | Неделя 1 это первая неделя … |
---|---|---|---|
Воскресенье | 0-53 | с воскресеньем в этом году | |
1 | Понедельник | 0-53 | с 4-мя или более днями в этом году |
2 | Воскресенье | 1-53 | с воскресеньем в этом году |
3 | Понедельник | 1-53 | с 4-мя или более днями в этом году |
4 | Воскресенье | 0-53 | с 4-мя или более днями в этом году |
5 | Понедельник | 0-53 | с понедельником в этом году |
6 | Воскресенье | 1-53 | с 4-мя или более днями в этом году |
7 | Понедельник | 1-53 | с понедельником в этом году |
8 | Воскресенье | 1-53 | содержащая 1 января |
9 | Понедельник | 1-53 | содержащая 1 января |
Для режимов со значением «с 4 или более днями в этом году» недели нумеруются в соответствии с ISO 8601:1988:
-
Если неделя, содержащая 1 января, имеет 4 или более дней в новом году, это неделя 1.
-
В противном случае это последняя неделя предыдущего года, а следующая неделя — неделя 1.
Для режимов со значением «содержит 1 января», неделя 1 – это неделя содержащая 1 января. Не имеет значения, сколько дней в новом году содержала неделя, даже если она содержала только один день.
Пример
Запрос:
Результат:
Как конвертировать объект datetime в строку
Модуль datetime в Python содержит метод , который делает обратное (то есть, конвертирует объект и в строки). Вот его синтаксис:
Примеры конвертации datetime в строку с помощью strftime()
Предположим, нужно конвертировать текущий объект в строку. Сначала нужно получить представление объекта и вызвать на нем метод .
Копировать
Результат — .
Как получить строковое представление даты и времени с помощью функции format()
Пример №1. Конвертация текущей временной метки в объекте в строку в формате «DD-MMM-YYYY (HH:MM:SS:MICROS)»:
Копировать
Результат:
Пример №2. Конвертация текущей временной метки объекта в строку в формате «HH:MM:SS.MICROS – MMM DD YYYY».
Копировать
Результат:
NOTES top
POSIX.1 specifies the following: Setting the value of the CLOCK_REALTIME clock via clock_settime() shall have no effect on threads that are blocked waiting for a relative time service based upon this clock, including the nanosleep() function; nor on the expiration of relative timers based upon this clock. Consequently, these time services shall expire when the requested relative interval elapses, independently of the new or old value of the clock. According to POSIX.1-2001, a process with "appropriate privileges" may set the CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID clocks using clock_settime(). On Linux, these clocks are not settable (i.e., no process has "appropriate privileges"). C library/kernel differences On some architectures, an implementation of clock_gettime() is provided in the vdso(7). Historical note for SMP systems Before Linux added kernel support for CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID, glibc implemented these clocks on many platforms using timer registers from the CPUs (TSC on i386, AR.ITC on Itanium). These registers may differ between CPUs and as a consequence these clocks may return bogus results if a process is migrated to another CPU. If the CPUs in an SMP system have different clock sources, then there is no way to maintain a correlation between the timer registers since each CPU will run at a slightly different frequency. If that is the case, then clock_getcpuclockid(0) will return ENOENT to signify this condition. The two clocks will then be useful only if it can be ensured that a process stays on a certain CPU. The processors in an SMP system do not start all at exactly the same time and therefore the timer registers are typically running at an offset. Some architectures include code that attempts to limit these offsets on bootup. However, the code cannot guarantee to accurately tune the offsets. Glibc contains no provisions to deal with these offsets (unlike the Linux Kernel). Typically these offsets are small and therefore the effects may be negligible in most cases. Since glibc 2.4, the wrapper functions for the system calls described in this page avoid the abovementioned problems by employing the kernel implementation of CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID, on systems that provide such an implementation (i.e., Linux 2.6.12 and later).
toTimeZone
Переводит дату или дату с временем в указанный часовой пояс. Часовой пояс — это атрибут типов и . Внутреннее значение (количество секунд) поля таблицы или результирующего столбца не изменяется, изменяется тип поля и, соответственно, его текстовое отображение.
Синтаксис
Синоним: .
Аргументы
- — время или дата с временем. DateTime64.
- — часовой пояс для возвращаемого значения. String.
Возвращаемое значение
Дата с временем.
Тип: DateTime.
Пример
Запрос:
Результат:
изменяет тип в . Значение (unix-время) 1546300800 остается неизменным, но текстовое отображение (результат функции toString()) меняется в .
Определение високосного года
Високосный год — это год с одним дополнительным днем (29 февраля). Причиной, по которой добавляется этот день в календарь, является различие между астрономическим и календарным годом. Календарный год состоит из 365 дней. Астрономический год — это время, за которое Земля делает оборот вокруг Солнца (365.25 дня). Данная разница в 6 часов приводит к тому, что за 4 года мы получаем еще 1 дополнительные сутки. А для того, чтобы наш календарь всегда оставался актуальным, мы раз в четыре года прибавляем к февралю один дополнительный день, поэтому в григорианском календаре в високосный год февраль содержит 29 дней вместо обычных 28, а сам год состоит из 366 дней вместо обычных 365.
Статический метод QDate::isLeapYear() помогает определить, является ли год високосным. В следующей программе у нас есть список лет (с 2010 по 2016 год), среди которых мы вычисляем високосные:
#include <QTextStream>
#include <QDate>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866″); // устанавливаем CP866-кодировку для консоли
// Инициализация списка лет
QList<int> years({2010, 2011, 2012, 2013, 2014, 2015, 2016});
// Перебираем все элементы списка и вычисляем високосные года
foreach (int year, years) {
if (QDate::isLeapYear(year)) {
out << year << » is a leap year» << endl;
} else {
out << year << » is not a leap year» << endl;
}
}
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли // Инициализация списка лет QList<int>years({2010,2011,2012,2013,2014,2015,2016}); // Перебираем все элементы списка и вычисляем високосные года foreach(intyear,years){ if(QDate::isLeapYear(year)){ out<<year<<» is a leap year»<<endl; }else{ out<<year<<» is not a leap year»<<endl; } } return; } |
Результат выполнения программы:
Стоит обратить внимание на то, что при инициализации списка лет, мы используем возможности стандарта языка C++11:
QList<int> years({2010, 2011, 2012, 2013, 2014, 2015, 2016});
1 | QList<int>years({2010,2011,2012,2013,2014,2015,2016}); |
Скорее всего, вам потребуется дополнительно включить данную возможность в проекте. Для этого в проектный файл .pro добавьте следующее:
Unix-время
Эпоха — это момент времени, выбранный в качестве начала определенной эры. Например, в западных христианских странах эпоха времени начинается с нулевого дня, когда родился Иисус. Другой пример — французский республиканский календарь, который использовался в течение двенадцати лет. Эта эпоха была началом Республиканской эры, которая была провозглашена 22 сентября 1792 года, в день провозглашения Первой Республики и упразднения монархии.
У компьютеров также есть свои эпохи. Одной из самых популярных является эпоха Unix. Эпоха Unix — это время 00:00:00 в формате UTC 1 января 1970 года (или 1970-01-01T00:00:00Z ISO 8601). Дата и время в компьютере определяются в соответствии с количеством секунд, прошедших с определенной эпохи для этого компьютера или платформы.
Unix-время — это количество секунд, прошедших с эпохи Unix. В следующем примере мы будем использовать две функции Qt5, чтобы получить Unix-время и преобразовать его в читабельную версию и обратно:
#include <QTextStream>
#include <QDate>
#include <ctime> // подключаем необходимый заголовочный файл
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
time_t t = time(0); // получаем Unix-время
out << t << endl;
QDateTime dt;
dt.setTime_t(t); // конвертируем Unix-время в обычный формат даты
out << dt.toString() << endl;
QDateTime cd = QDateTime::currentDateTime();
out << cd.toTime_t() << endl; // метод toTime_t() также может быть использован для получения Unix-времени
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли time_tt=time();// получаем Unix-время out<<t<<endl; QDateTime dt; dt.setTime_t(t);// конвертируем Unix-время в обычный формат даты out<<dt.toString()<<endl; QDateTime cd=QDateTime::currentDateTime(); out<<cd.toTime_t()<<endl;// метод toTime_t() также может быть использован для получения Unix-времени return; } |
Результат выполнения программы:
На этом всё! До следующего урока!
Бенчмаркинг
Будьте внимательны, если хотите точно протестировать производительность функции, которая зависит от процессора.
Например, сравним две функции, вычисляющие разницу между двумя датами: какая сработает быстрее?
Подобные вычисления, замеряющие производительность, также называют «бенчмарками» (benchmark).
Обе функции делают буквально одно и то же, только одна использует явный метод для получения даты в миллисекундах, а другая полагается на преобразование даты в число. Результат их работы всегда один и тот же.
Но какая функция быстрее?
Для начала можно запустить их много раз подряд и засечь разницу. В нашем случае функции очень простые, так что потребуется хотя бы 100000 повторений.
Проведём измерения:
Вот это да! Метод работает ощутимо быстрее! Всё потому, что не производится преобразование типов, и интерпретаторам такое намного легче оптимизировать.
Замечательно, это уже что-то. Но до хорошего бенчмарка нам ещё далеко.
Представьте, что при выполнении процессор параллельно делал что-то ещё, также потребляющее ресурсы. А к началу выполнения он это уже завершил.
Достаточно реалистичный сценарий в современных многопроцессорных операционных системах.
В итоге у первого бенчмарка окажется меньше ресурсов процессора, чем у второго. Это может исказить результаты.
Для получения наиболее достоверных результатов тестирования производительности весь набор бенчмарков нужно запускать по нескольку раз.
Например, так:
Современные интерпретаторы JavaScript начинают применять продвинутые оптимизации только к «горячему коду», выполняющемуся несколько раз (незачем оптимизировать то, что редко выполняется). Так что в примере выше первые запуски не оптимизированы должным образом. Нелишним будет добавить предварительный запуск для «разогрева»:
Будьте осторожны с микробенчмарками
Современные интерпретаторы JavaScript выполняют множество оптимизаций. Они могут повлиять на результаты «искусственных тестов» по сравнению с «нормальным использованием», особенно если мы тестируем что-то очень маленькое, например, работу оператора или встроенной функции. Поэтому если хотите серьёзно понять производительность, пожалуйста, изучите, как работают интерпретаторы JavaScript. И тогда вам, вероятно, уже не понадобятся микробенчмарки.
Отличный набор статей о V8 можно найти на http://mrale.ph.
Перевод строки в Date
- 4 цифры для года (yyyy);
- 2 цифры для месяца (ММ);
- 2 цифры для дня (dd);
- 2 цифры для часов в 24-часовом формате (HH);
- 2 цифры для минут (mm);
- 2 цифры для секунд (ss).
SimpleDateFormat
Символ | Описание | Пример |
---|---|---|
G | эра (в английской локализации — AD и BC) | н.э. |
y | год (4-х значное число) | 2020 |
yy | год (последние 2 цифры) | 20 |
yyyy | год (4-х значное число) | 2020 |
M | номер месяца (без лидирующих нулей) | 8 |
MM | номер месяца (с лидирующими нулями, если порядковый номер месяца < 10) | 04 |
MMM | трехбуквенное сокращение месяца (в соответствии с локализацией) | янв |
MMMM | полное название месяца | Июнь |
w | неделя в году (без лидирующих нулей) | 4 |
ww | неделя в году (с лидирующими нулями) | 04 |
W | неделя в месяце (без лидирующих нулей) | 3 |
WW | неделя в месяце (с лидирующим нулем) | 03 |
D | день в году | 67 |
d | день месяца (без лидирующих нулей) | 9 |
dd | день месяца (с лидирующими нулями) | 09 |
F | день недели в месяце (без лидирующих нулей) | 9 |
FF | день недели в месяце (с лидирующими нулями) | 09 |
E | день недели (сокращение) | Вт |
EEEE | день недели (полностью) | пятница |
u | номер дня недели (без лидирующих нулей) | 5 |
uu | номер дня недели (с лидирующими нулями) | 05 |
a | маркер AM/PM | AM |
H | часы в 24-часовом формате без лидирующих нулей | 6 |
HH | часы в 24-часовом формате с лидирующим нулем | 06 |
k | количество часов в 24-часовом формате | 18 |
K | количество часов в 12-часовом формате | 6 |
h | время в 12-часовом формате без лидирующих нулей | 6 |
hh | время в 12-часовом формате с лидирующим нулем | 06 |
m | минуты без лидирующих нулей | 32 |
mm | минуты с лидирующим нулем | 32 |
s | секунды без лидирующих нулей | 11 |
ss | секунды с лидирующим нулем | 11 |
S | миллисекунды | 297 |
z | часовой пояс | EET |
Z | часовой пояс в формате RFC 822 | 300 |
Шаблон | Пример |
---|---|
dd-MM-yyyy | 01-11-2020 |
yyyy-MM-dd | 2019-10-01 |
HH:mm:ss.SSS | 23:59.59.999 |
yyyy-MM-dd HH:mm:ss | 2018-11-30 03:09:02 |
yyyy-MM-dd HH:mm:ss.SSS | 2016-03-01 01:20:47.999 |
yyyy-MM-dd HH:mm:ss.SSS Z | 2013-13-13 23:59:59.999 +0100 |
SimpleDateFormatjava string to dateSimpleDateFormat
-
Создаем строку, с которой нужно задать дату:
-
Создаем новый объект SimpleDateFormat с шаблоном, который совпадает с тем, что у нас в строке (иначе распарсить не получится):
Как вы видите, у нас тут появился аргумент Locale. Если же мы его опустим, он будет использовать значение Locale по умолчанию, которое не всегда является английским.
Если языковой стандарт не совпадает с входной строкой, то строковые данные, привязанные к языку, как у нас Mon или April, не будут распознаны и вызовут падение — java.text.ParseException, даже в том случае когда шаблон подходит.
Тем не менее, можно не указывать формат, если у нас используется шаблон, который не привязан к языку. Как пример — yyyy-MM-dd HH:mm:ss
-
Создаём дату с помощью форматтера, который в свою очередь парсит её из входной строки:
Вывод в консоль:
Хммм….Но формат-то уже не тот!
Чтобы сделать тот же формат, вновь используем форматтер:
Вывод в консоль:
Работа с днями недели
Метод dayOfWeek() возвращает число, которое представляет день недели, где — это понедельник, а — воскресенье. В следующей программе мы отобразим текущий день недели в формате короткого и полного названия:
#include <QTextStream>
#include <QDate>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
// Получаем текущую дату
QDate cd = QDate::currentDate();
int wd = cd.dayOfWeek(); // определяем название дня недели
QLocale loc;
out << «Today is » << QDate::shortDayName(wd) << endl; // выводим короткое название дня недели
out << «Today is » << QDate::longDayName(wd) << endl; // выводим полное название дня недели
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли // Получаем текущую дату QDate cd=QDate::currentDate(); intwd=cd.dayOfWeek();// определяем название дня недели QLocale loc; out<<«Today is «<<QDate::shortDayName(wd)<<endl;// выводим короткое название дня недели out<<«Today is «<<QDate::longDayName(wd)<<endl;// выводим полное название дня недели return; } |
Результат выполнения программы:
Мы можем вычислить количество дней в конкретном месяце с помощью метода daysInMonth(), а количество дней в году с помощью метода daysInYear(). В следующем примере мы создадим пять объектов даты и вычислим количество дней в этих месяцах и в конкретном году:
#include <QTextStream>
#include <QDate>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
QList<QString> months;
months.append(«January»);
months.append(«February»);
months.append(«March»);
months.append(«April»);
months.append(«May»);
months.append(«June»);
months.append(«July»);
months.append(«August»);
months.append(«September»);
months.append(«October»);
months.append(«November»);
months.append(«December»);
// Создаем объекты с датами
QDate dt1(2015, 9, 18);
QDate dt2(2015, 2, 11);
QDate dt3(2015, 5, 1);
QDate dt4(2015, 12, 11);
QDate dt5(2015, 1, 21);
// С помощью метода daysInMonth() получаем количество дней в месяцах, указанных в объектах с датами
out << «There are » << dt1.daysInMonth() << » days in »
<< months.at(dt1.month()-1) << endl;
out << «There are » << dt2.daysInMonth() << » days in »
<< months.at(dt2.month()-1) << endl;
out << «There are » << dt3.daysInMonth() << » days in »
<< months.at(dt3.month()-1) << endl;
out << «There are » << dt4.daysInMonth() << » days in »
<< months.at(dt4.month()-1) << endl;
out << «There are » << dt5.daysInMonth() << » days in »
<< months.at(dt5.month()-1) << endl;
// С помощью метода daysInYear() получаем количество дней в году, указанном в объекте с датой
out << «There are » << dt1.daysInYear() << » days in year »
<< QString::number(dt1.year()) << endl;
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли QList<QString>months; months.append(«January»); months.append(«February»); months.append(«March»); months.append(«April»); months.append(«May»); months.append(«June»); months.append(«July»); months.append(«August»); months.append(«September»); months.append(«October»); months.append(«November»); months.append(«December»); // Создаем объекты с датами QDate dt1(2015,9,18); QDate dt2(2015,2,11); QDate dt3(2015,5,1); QDate dt4(2015,12,11); QDate dt5(2015,1,21); // С помощью метода daysInMonth() получаем количество дней в месяцах, указанных в объектах с датами out<<«There are «<<dt1.daysInMonth()<<» days in « <<months.at(dt1.month()-1)<<endl; out<<«There are «<<dt2.daysInMonth()<<» days in « <<months.at(dt2.month()-1)<<endl; out<<«There are «<<dt3.daysInMonth()<<» days in « <<months.at(dt3.month()-1)<<endl; out<<«There are «<<dt4.daysInMonth()<<» days in « <<months.at(dt4.month()-1)<<endl; out<<«There are «<<dt5.daysInMonth()<<» days in « <<months.at(dt5.month()-1)<<endl; // С помощью метода daysInYear() получаем количество дней в году, указанном в объекте с датой out<<«There are «<<dt1.daysInYear()<<» days in year « <<QString::number(dt1.year())<<endl; return; } |
Результат выполнения программы:
Передать дату в объект Date — в формате строки
Мы также можем использовать строчные выражения для передачи в объект и получения соответствующего момента времени.
В этом случае в объекте будет автоматически использоваться метод для определения даты и времени, которые мы в него передаем.
1newDate('2020-09-20'); 2 3 4newDate('2020/09/20'); 5 6 7newDate('September 20, 2020'); 8 9 10newDate('20 September 2020'); 11 12 13newDate('September 2020'); 14 15 16newDate('2020 September'); 17 18 19newDate('2020-09'); 20
Также есть возможность использовать метод , который возвращает временную метку в миллисекундах.
1newDate('September 20, 2020'); 2 3 4Date.parse('September 20, 2020'); 5
Константы даты и времени
Константа datetime — это дата и время, представленные в следующем формате: yyyy.mm.dd hh:mm. Например, 15 июня 2009 года в 0:00 будет 2009.06.15 00:00.
Чтобы преобразовать переменную datetime в строковую константу, используйте функцию TimeToStr(). Вот ее синтаксис:
string TimeToStr (datetime Time, int Output = TIME_DATE | TIME_MINUTES);
- Time — переменная дата-время, выраженная в количестве секунд, прошедших с 1 января, 1970.
-
Output — необязательный параметр, который выводит константу только в виде даты, часа и минуты, часа, минуты и секунды или любая другой комбинации даты и времени. Допустимые значения ввода:
TIME_DATE — выводит дату, например, 2009.06.15 TIME_MINUTES — выводит часы и минуты, например, 05:30 TIME_SECONDS — выводит часы, минуты и секунды, например, 05:30:45
Чтобы вывести строковую константу в формате по умолчанию yyyy.mm.dd hh: mm, оставьте поле Output пустым. Если вам нужна только дата, либо часы и минуты (или секунды), используйте соответствующий аргумент. В этом примере мы предположим, что StartTime равен 2009.06.15 05:30:45.
TimeToStr (StartTime, TIME_DATE) // Возвращает "2009.06.15" TimeToStr (StartTime, TIME_SECONDS) // Возвращает "05:30:45" TimeToStr (StartTime, TIME_MINUTES) // Возвращает "05:30" TimeToStr (StartTime, TIME_DATE | TIME_SECONDS) // Возвращает «2009.06.15 05:30:45» TimeToStr (StartTime) // Возвращает «2009.06.15 05:30»
Мы можем создать константу даты и времени, используя конкатенацию строк, и преобразовать ее в переменную даты и времени, используя функцию StrToTime(). Синтаксис идентичен TimeToStr() выше, но без параметра Output. Строковая константа должна быть в формате yyyy.mm.dd hh: mm для правильного преобразования.
Сначала мы объявим некоторые внешние переменные для установки времени и даты:
extern int UseMonth = 6; extern int UseDay = 15; extern int UseHour = 5; extern int UseMinute = 30;
Затем мы создаем строковую константу, используя функцию StringConcatenate(), и, наконец, преобразуем строку в формат datetime, используя StrToTime().
string DateConstant = StringConcatenate (Year (), ".", UseMonth, ".", UseDay, "", UseHour, ":", UseMinute); // DateConstant равен "2009.6.15 05:30" datetime StartTime = StrToTime (DateConstant); // StartTime равен "1245043800"
Обратите внимание, что в функции StringConcatenate() мы используем Year() для возврата текущего года вместо использования внешней переменной. Вы можете использовать такие функции, как Month(), Day() и т
д.
CTime:: CTime
Создает новый объект, инициализируемый с указанным временем.
Параметры
тимесрк
Указывает уже существующий объект.
timeЗначение времени, которое представляет собой число секунд после 1 января 1970 UTC
Обратите внимание, что это значение будет изменено на местное время. Например, если вы используете Нью-Йорк и создаете объект, передав параметр 0, GetObject возвратит 12
НЕАР, нмонс, nОшибка дня, nчас суток, nмин., NSEC
Указывает значения даты и времени, которые должны быть скопированы в новый объект.
ндст
Указывает, действует ли летнее время. Может иметь одно из трех значений:
-
для НДСТ задано значение 0Standard Time.
-
для НДСТ задано значение больше, чем 0Daylight экономия времени.
-
для НДСТ задано значение меньше 0The по умолчанию. Автоматически вычислит, действует ли стандартное время или летнее время.
вдосдате, вдостиме
Значения даты и времени MS-DOS, которые должны быть преобразованы в значение даты и времени и скопированы в новый объект.
st
Структура SYSTEMTIME , которую необходимо преобразовать в значение даты и времени и скопировать в новый объект.
ФТ
Структура fileTime , которую необходимо преобразовать в значение даты и времени и скопировать в новый объект.
DBTS
Ссылка на структуру DBTIMESTAMP, содержащую текущее местное время.
Комментарии
Каждый конструктор описан ниже.
-
Конструирует неинициализированный объект. Этот конструктор позволяет определять массивы объектов. Следует инициализировать такие массивы с допустимыми значениями времени перед использованием.
-
Конструирует объект из другого значения.
-
Конструирует объект из типа . Этот конструктор принимает время в формате UTC и преобразует результат в местное время перед сохранением результата.
-
Создает объект из локальных компонентов времени с каждым компонентом, ограниченным следующими диапазонами:
Компонент Диапазон неар 1970-3000 нмонс 1–12 nОшибка дня 1–31 Nчас суток 0-23 Nмин. 0-59 nSec 0-59 Этот конструктор выполняет соответствующее преобразование в формате UTC. Отладочная версия библиотека Microsoft Foundation Class утверждает, если один или несколько компонентов времени выходят за пределы диапазона. Перед вызовом необходимо проверить аргументы. Этот конструктор принимает местное время.
-
Конструирует объект на основе указанных значений даты и времени MS-DOS. Этот конструктор принимает местное время.
-
Конструирует объект из структуры. Этот конструктор принимает местное время.
-
Конструирует объект из структуры. Скорее всего, инициализация не будет использоваться напрямую. Если для работы с файлом используется объект, получает отметку времени файла для вас через объект, инициализируемый структурой. Этот конструктор предполагает время на основе времени в формате UTC и автоматически преобразует значение в местное время перед сохранением результата.
Примечание
Конструктор, использующий параметр, доступен только при включении OLEDB. h.
дополнительные сведения см. в разделе структура SYSTEMTIME и FILETIME в Windows SDK. см. также запись даты и времени MS-DOS в Windows SDK.
COLOPHON top
This page is part of release 5.13 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/. Linux 2021-03-22 GETTIMEOFDAY(2)
Pages that refer to this page:
adjtimex(2),
alarm(2),
clock_getres(2),
getitimer(2),
seccomp(2),
stime(2),
syscalls(2),
time(2),
timerfd_create(2),
adjtime(3),
ctime(3),
difftime(3),
ftime(3),
pmdaeventarray(3),
pmtimeval(3),
timeradd(3),
tzset(3),
uuid_time(3),
rtc(4),
systemd.exec(5),
capabilities(7),
system_data_types(7),
time(7),
vdso(7),
hwclock(8),
mount(8)
Дата и время
Объекты даты и времени могут быть инициализированы двумя основными способами: инициализация в конструкторе или создание пустых объектов и их последующее заполнение данными.
#include <QTextStream>
#include <QDate>
#include <QTime>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
// Создаем объект даты и помещаем в него год, месяц и день
QDate dt1(2015, 4, 12);
out << «The date is » << dt1.toString() << endl; // конвертируем нашу дату в строку и выводим на экран
QDate dt2;
dt2.setDate(2015, 3, 3);
out << «The date is » << dt2.toString() << endl;
QTime tm1(17, 30, 12, 55);
out << «The time is » << tm1.toString(«hh:mm:ss.zzz») << endl;
// Создаем пустой объект времени
QTime tm2;
tm2.setHMS(13, 52, 45, 155); // передаем часы, минуты, секунды и миллисекунды
// Выводим время, включая миллисекунды (по умолчанию они не выводятся)
out << «The time is » << tm2.toString(«hh:mm:ss.zzz») << endl;
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли // Создаем объект даты и помещаем в него год, месяц и день QDate dt1(2015,4,12); out<<«The date is «<<dt1.toString()<<endl;// конвертируем нашу дату в строку и выводим на экран QDate dt2; dt2.setDate(2015,3,3); out<<«The date is «<<dt2.toString()<<endl; QTime tm1(17,30,12,55); out<<«The time is «<<tm1.toString(«hh:mm:ss.zzz»)<<endl; // Создаем пустой объект времени QTime tm2; tm2.setHMS(13,52,45,155);// передаем часы, минуты, секунды и миллисекунды // Выводим время, включая миллисекунды (по умолчанию они не выводятся) out<<«The time is «<<tm2.toString(«hh:mm:ss.zzz»)<<endl; return; } |
Результат выполнения программы:
В следующем примере мы выведем текущую дату и время на экран:
#include <QTextStream>
#include <QTime>
#include <QDate>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
QDate cd = QDate::currentDate(); // возвращаем текущую дату
QTime ct = QTime::currentTime(); // возвращаем текущее время
// Выполняем конвертацию даты и времени в строки и выводим их
out << «Current date is: » << cd.toString() << endl;
out << «Current time is: » << ct.toString() << endl;
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли QDate cd=QDate::currentDate();// возвращаем текущую дату QTime ct=QTime::currentTime();// возвращаем текущее время // Выполняем конвертацию даты и времени в строки и выводим их out<<«Current date is: «<<cd.toString()<<endl; out<<«Current time is: «<<ct.toString()<<endl; return; } |
Результат выполнения программы:
Проверка корректности даты
Для проверки корректности (валидности) даты используется метод isValid():
#include <QTextStream>
#include <QDate>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
// Первые две даты корректны, а вот третья — нет (т.к. февраль может иметь 28 или 29 дней)
QList<QDate> dates({QDate(2015, 5, 11), QDate(2015, 8, 1),
QDate(2015, 2, 30)});
for (int i=0; i < dates.size(); i++) {
// Выводим информацию о корректности проверяемой даты на экран
if (dates.at(i).isValid()) {
out << «Date » << i+1 << » is a valid date» << endl;
} else {
out << «Date » << i+1 << » is not a valid date» << endl;
}
}
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли // Первые две даты корректны, а вот третья — нет (т.к. февраль может иметь 28 или 29 дней) QList<QDate>dates({QDate(2015,5,11),QDate(2015,8,1), QDate(2015,2,30)}); for(inti=;i<dates.size();i++){ // Выводим информацию о корректности проверяемой даты на экран if(dates.at(i).isValid()){ out<<«Date «<<i+1<<» is a valid date»<<endl; }else{ out<<«Date «<<i+1<<» is not a valid date»<<endl; } } return; } |
Результат выполнения программы:
Мы можем легко посчитать, сколько дней осталось до какой-нибудь конкретной даты с помощью метода daysTo() или какая дата наступит по истечении определенного количества дней с помощью метода addDays(). Допустим, мы хотим узнать, какая дата будет через 55 дней после 11 мая 2019 года, а также сколько дней осталось до Рождества:
#include <QTextStream>
#include <QDate>
int main() {
QTextStream out(stdout);
out.setCodec(«CP866»); // устанавливаем CP866-кодировку для консоли
QDate dt(2019, 5, 11); // указываем дату
QDate nd = dt.addDays(55); // возвращаем дату через 55 дней после указанной выше даты
QDate xmas(2019, 12, 24);
out << «55 days from » << dt.toString() << » is »
<< nd.toString() << endl;
out << «There are » << QDate::currentDate().daysTo(xmas) // возвращаем количество дней до наступления Рождества
<< » days till Christmas» << endl;
return 0;
}
1 |
#include <QTextStream> intmain(){ QTextStream out(stdout); out.setCodec(«CP866»);// устанавливаем CP866-кодировку для консоли QDate dt(2019,5,11);// указываем дату QDate nd=dt.addDays(55);// возвращаем дату через 55 дней после указанной выше даты QDate xmas(2019,12,24); out<<«55 days from «<<dt.toString()<<» is « <<nd.toString()<<endl; out<<«There are «<<QDate::currentDate().daysTo(xmas)// возвращаем количество дней до наступления Рождества <<» days till Christmas»<<endl; return; } |
Результат выполнения программы:
Создание даты – 4 примера
В JavaScript создание даты осуществляется с помощью объекта . Объект представляет собой точку на оси времени и предназначен для хранения даты и времени с точностью до миллисекунды.
Примеры создания даты в JavaScript.
1. Создание текущей даты и времени.
Получить текущую дату и время в JavaScript осуществляется посредством создания экземпляра объекта Date без указания параметров:
// текущая дата (дата и время, которая была в момент создания экземпляра объекта Date на локальном компьютере пользователя) var now = new Date(); // например, выведем текущую дату в консоль console.log(now);
Если нужно получить только сегодняшнюю дату в формате строки, то можно воспользоваться методом :
var now = new Date().toLocaleDateString(); // 19.12.2019
Текущее время пользователя можно получить так:
var now = new Date().toLocaleTimeString(); // 11:02:48 var now = new Date().toLocaleTimeString().slice(0,-3); // 11:02
Дату и время в формате строки можно получить следующим образом:
var now = new Date().toLocaleString(); // 19.12.2019, 11:02:48
2. Создание даты путём указания объекту количества миллисекунд, прошедших с 1 января 1970 00:00:00 UTC.
// 1 год (не высокосный) = 365*24*60*60*1000 = 31536000000 мс // например, создадим дату 01.01.1971, 00:00:00 по UTC: var date1 = new Date(31536000000);
3. Создание даты посредством указания её объекту Date в виде строки.
При этом варианте создания даты JavaScript попытается понять переданную ей строку и сформировать на основе её дату. Преобразование строки в дату в JavaScript осуществляется с помощью метода .
Например:
// создание даты на основе строки в формате DD.MM.YY var date1 = new Date('05.11.19'); // создадим дату на основе строки в формате YYYY-MM-DDThh:mm:ss.sss (символ T используется для разделения даты и времени) var date2 = new Date('2015-02-24T21:23'); // создадим дату на основе строки с указанием часового пояса (формат YYYY-MM-DDThh:mm:ss.sss±hh:mm): var date3 = new Date('2015-02-24T22:02+03:00');
4. Создание даты посредством указания следующих параметров через запятую: год (4 цифры), месяц (отсчёт ведётся с 0), день (1..31), часы (0..23), минуты (0..59), секунды (0..59), миллисекунды (0..999). Причём обязательными из них являются только первые два параметра.
Пример создания даты с указанием только обязательных параметров:
// создадим дату 01.01.2015 (неуказанные параметры по умолчанию равны: число - 01, часы - 00, минуты - 00, секунды - 00, миллисекунды – 000). var date1 = new Date(2015,01); // создадим дату 24.01.2015, 21:23 var date2 = new Date(2015,01,24,21,23);
Примечание: Если Вам необходимо установить дату и время в UTC, то можно воспользоваться методом .
//1 пример var date1 = Date.UTC(2015,1,1); var date2 = new Date(date1); alert(date2.toUTCString()); //2 пример var newDate = new Date(Date.UTC(2015,1,1)); alert(newDate.toUTCString());