Статья обновлена: 13 июля 2022
ID: 3508
Оптимальная защита для Windows
Kaspersky for Windows защищает вашу цифровую жизнь, выходя за рамки обычного антивируса.
Ошибки в работе программ «Лаборатории Касперского» могут быть связаны с тем, что на компьютере неправильно установлено системое время, дата или часовой пояс. Чтобы это исправить:
- Проверьте и при необходимости измените часовой пояс.
- Синхронизируйте дату и время с сервером времени в интернете.
Если после этого дата или время не совпадают с текущими, измените их вручную.
Подробные инструкции для Windows 11, 10, 8, 8.1, 7 и Vista смотрите ниже.
Windows 11, 10
Windows 8, 8.1
Windows Vista, 7
11 / 11 / 12 Регистрация: 06.05.2015 Сообщений: 421 |
|
1 |
|
Узнать системную дату15.11.2015, 16:35. Показов 3843. Ответов 3
Подскажите, как можно узнать системную дату…
0 |
Joker456 19 / 19 / 16 Регистрация: 13.10.2013 Сообщений: 205 |
||||
15.11.2015, 18:32 |
2 |
|||
0 |
4982 / 3089 / 456 Регистрация: 10.11.2010 Сообщений: 11,165 Записей в блоге: 10 |
|
15.11.2015, 18:42 |
3 |
В стандартной библиотеке C++ пока нет функций/классов/методов для получения системной даты.
0 |
599 / 237 / 69 Регистрация: 08.08.2015 Сообщений: 1,637 |
|
15.11.2015, 19:03 |
4 |
Rider98, смотри методы GetSystemTime GetLocalTime в WinAPI, если конечно вопрос про нее
0 |
Введение | |
Узнать текущие системные дату и время (date) | |
Узнать текущие дату и время BIOS (hwclock) | |
Изменить дату и время вручную | |
Синхронизация с ntp | |
Заставить систему синхронизовать время с ntp | |
Похожие статьи |
Введение
При работе в сети синхронизация времени и даты это важный
фактор увеличивающий стабильность и
безопасность
работы всех систем.
В этой статье вы узнаете как настраивать дату и время вручную. И, что более
важно – как синхронизировать их с ntp сервером.
Узнать текущее системное время
Узнать текущее системное время можно командой
date
date
2023-05-19 16:51:44.364911+02:00
Узнать текущее время BIOS
Узнать текущее системное время BIOS можно командой
hwclock
sudo hwclock
2023-05-19 16:51:44.389911+02:00
date и hwclock
могут показывать совершенно разное время
Исправить текущее время
Сначала нужно задать время командой
date
date MMDDhhmmCCYY.ss
MM | две цифры текущего месяца (пример: январь=01); |
DD | две цифры текущей даты (если текущий календарный день 1, то пишется 01); |
hh | две цифры обозначающие час |
mm
|
две цифры обозначающие минуты |
CCYY | четыре цифры года |
ss | две цифры секунд |
Также можно вводить «date MMDDhhmmCCYY»
без секунд, тогда секунды выставляются на ноль.
После выполнения date нужно внести новое установленное время в BIOS:
hwclock –systohc
Теперь осталось только проверить сохранились ли изменения
sudo hwclock
Синхронизация с ntp
Проверьте установлен ли ntp командой
which ntpd
/usr/sbin/ntpd
Если ntp не установлен выполните
sudo yum install ntp
Проверьте запускается ли ntpd автоматически командой
systemctl list-unit-files | grep ntpd.s
ntpd.service enabled
Если ntpd неактивен (disabled) выполните
systemctl start ntpd
systemctl enable ntpd
Проверить добавлен ли сервис ntp в зону public в firewall можно командой
sudo firewall-cmd –get-services | grep ntp
Если ещё не добавлен, то чтобы разрешить UDP траффик от ntp выполните
firewall-cmd –permanent –add-service=ntp
firewall-cmd –reload
success
success
Отредактируйте файл
ntp.conf
с настройками сервера
vi /etc/ntp.conf
server 0.fi.pool.ntp.org
server 1.fi.pool.ntp.org
server 2.fi.pool.ntp.org
server 3.fi.pool.ntp.org
Теперь нужно перезапустить ntpd
systemctl restart ntpd
Проверить откуда берётся время можно командой
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
time.cloudflare 10.79.8.177 3 u 14 64 7 3.987 -0.366 0.016
37.228.129.2 193.66.253.94 2 u 16 64 7 5.301 -1.639 1.908
ivanova.ganneff 237.17.204.95 2 u 13 64 7 5.296 3.850 0.266
ntp23.kashra-se 192.168.100.15 2 u 12 64 5 32.935 -2.213 0.192
Выставить время BIOS по только что полученному времени можно командой
hwclock –systohc
Заставить систему синхронизовать время с ntp
Можно следующей командой
ntpdate -u 0.fi.pool.ntp.org
Вместо 0.fi.pool.ntp.org поставьте нужный вам сервер
Linux | |
FAQ | |
Debian | |
Ubuntu | |
CentOS | |
Rocky | |
Bash | |
Настройка сети | |
Файлы, директории, ссылки… | |
Изучить свободное место на диске | |
Объединить .pdf файлы | |
diff: сравнение файлов | |
find: поиск файлов | |
wget: скачивание файлов | |
kill: завершить процесс | |
curl | |
make | |
signal: системные сигналы | |
env: переменные окружения | |
localectl: язык | |
systemctl: Список активных сервисов | |
Firewall | |
SCP: обмен файлами; | |
SSH: удалённый доступ | |
cron: задания по расписанию | |
sudo | |
Мониторинг ресурсов | |
C | |
C++ |
Во время работы в командной строке Linux, вы могли бы войти в ситуацию, когда вам нужно отобразить (или даже изменить) текущее системное время. Мало того, что, если вы работаете с членами в команде, которые находятся в разных часовых поясах, возможно, вы захотите, обновлять с течением времени информацию, касающейся зоны, в которых сидят другие члены.
Если вы ищете инструмент, который позволяет делать все это (и многое другое), вы будете рады узнать, что существует команда date. В этой статье мы обсудим основные команды «date», а также, как вы можете использовать ее. Но прежде чем мы это сделаем, стоит отметить, что все команды и инструкции, упомянутые здесь, были протестированы на Ubuntu 16,04 LTS.
Вот общий синтаксис команды date:
date [OPTION]... [+FORMAT]
А вот что говорит страница man об этом:
date - вывод или установка даты и время системы Отображение текущего времени в данном формате, или установка системной даты.
Следующие примеры должны дать вам хорошее представление о том, как эта команда работает.
Q1. Как получить системную дату/время с помощью команды date?
Это поведение по умолчанию. Чтобы узнать дату и время вашей системы, все, что вам нужно сделать, это запустить программу следующим образом (да, любой вариант без):
date
Вот команда в действии:
date Sun Jul 9 19:41:10 MSK 2017
Таким образом, вы можете видеть, что информация, как день, дата, время, часовой пояс, а также год был показан на выводе.
Q2. Как получить дату, соответствующую дню?
Чаще всего, мы смотрим на календари, чтобы знать дату в определенный день недели. Например, требование может быть такое, узнать дату «когда следующий вторник». Вы будете рады узнать, что это возможно с помощью команды «date».
-d или —date параметр командной строки будет помощью в этом случае:
date -d "next Tuesday"
Вот вышеприведенная команда в действии:
date -d "next Tuesday" Tue Jul 11 00:00:00 MSK 2017
Итак, как вы можете видеть, команда показала, что следующий вторник 4 июля.
Входной параметр -d/—date может быть разных типов. Вот как man описывает эту команду:
--date = строка в основном свободный формат удобочитаемой строки даты, такие как «Sun, 09 Feb 2017 19:21:20 -1905» или «2017-02-09 19:21:20» или даже «в следующий четверг», Строка даты может содержать элементы, указывающие на календарную дату, время суток, часовой пояс, день недели, относительное время, относительную дату и номер. Пустая строка указывает на начало дня. Формат строки даты является более сложным, чем описываемая здесь, но полностью описаны в информационной документации.
Чтобы получить доступ к информации в документации на дату, используйте следующую команду:
info date
Q3. Как отображать информацию о дате/времени в формате ISO 8601?
В случае, если вы хотите, инструмент для отображения информации о дате/времени в формате ISO 8601, вы можете использовать параметр —iso-8601 командной строки. Эта опция требует, указать формат.
--iso-8601[=FMT]
Вот как страница man объясняет «format»:
FMT='date' только для даты (по умолчанию), 'hours', 'minutes', 'seconds', или 'ns' для даты и времени с указанной точностью. Пример: 2017-07-09T19:20:30-0600
Например, мы тестировали следующую команду:
date --iso-8601=seconds
На выходе было произведено:
2017-07-09T19:48:20+03:00
Q4. Как отображать дату/время в формате RFC 3339?
Как вы уже догадались, есть специальный параметр командной строки для этого: —rfc-3339. Как вариант, рассмотренный в предыдущем разделе, один также требует ввести формат.
Следующий пример показывает эту опцию в действии:
date --rfc-3339=seconds 2017-07-09 19:49:58+03:00
Кроме того, вы можете использовать —rfc-2822 для возможности выводить данные в этом формате.
Q5. Как использовать дату для отображения времени последнего изменения файла?
Вы можете также использовать команду date, чтобы отобразить время последнего изменения файла. Опция -r позволяет сделать это. Вот пример:
date -r file1
Вывод:
date -r file1 Tue Jul 09 19:53:10 MSK 2017
Q6. Как установить системную дату/время, используя команду date?
Для установки системной даты/времени на другое значение, используйте параметр -s командной строки. Эта опция требует строку, которая будет использоваться в качестве входных данных для установки системной времени/даты.
date -s STRING
Примечание:
Доступные опции, которые можно использовать в качестве строк уже объяснены в Q2 выше.
Вот пример того, как мы использовали параметр -s, чтобы установить дату и время в нашей системы:
date -s "2017-06-27 14:53:00"
Пожалуйста, обратите внимание, что вам, возможно, придется использовать «sudo» для опции -s.
Q7. Как отобразить текущее время в другом месте?
Для того, чтобы команда date отображала текущее время в другом месте — скажем, Мельбурн в Австралии — использовать ее надо следующим образом:
TZ="Australia/Melbourne" date
Вот вышеприведенная команда в действии:
TZ="Australia/Melbourne" date Mon Jul 10 02:59:50 AEST 2017
Примечание:
Вы можете использовать команду «tzselect», чтобы найти значение, которое нужно для TZ.
Q8. Как распечатать или установить всеобщее Скоординированное время (UTC)?
Для этого используйте параметр -u командной строки. Например, следующая команда будет отображать информацию в формате UTC:
date -u
# date -u Sun Jul 9 16:32:28 UTC 2017
Вывод
Как большинство из вас, согласитесь, команда date не трудно понять и использовать. Кроме того, тот факт, что она также может быть использована при работе с несколькими географическими местами делает ее важным инструментом командной строки. Мы обсудили большинство параметров командной строки здесь, так что просто попробуйте их на вашей системе.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Для работы с системной датой и временем используется библиотека time.h.
Типы, определенные в библиотеке time.h
Тип | Описание |
size_t | Целочисленный тип, возвращаемый операцией sizeof. |
clock_t | Арифметический тип, подходящий для представления времени. |
time_t | Арифметический тип, подходящий для представления времени. |
struct tm | Структурный тип, содержащий компоненты календарного времени. |
Для определения текущего календарного времени используется функция
Данная функция возвращает время в секундах начиная с 1 января 1970 г.
Например,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
char * settime(struct tm *u)
{
char s[40];
char *tmp;
for (int i = 0; i<40; i++) s[i] = 0;
int length = strftime(s, 40, “%d.%m.%Y %H:%M:%S, %A”, u);
tmp = (char*)malloc(sizeof(s));
strcpy(tmp, s);
return(tmp);
}
int main()
{
struct tm *u;
char *f;
system(“chcp 1251”);
system(“cls”);
const time_t timer = time(NULL);
u = localtime(&timer);
f = settime(u);
printf(“%ld соответствует “, timer);
puts(f);
getchar();
return 0;
}
Структура tm имеет вид
struct tm
{
int tm_sec; // секунды после минут [0,59]
int tm_min; // минуты после часов [0,59]
int tm_hour; // часы после полуночи [0,23]
int tm_mday; // день месяца [1,31]
int tm_mon; // месяц года (январь = 0) [0,11]
int tm_year; // год (1900 год = 0)
int tm_wday; // день недели (вс = 0) [0,6]
int tm_yday; // день года (1 января = 0) [0,365]
int tm_isdst; // флаг перехода на летнее время (>0- вкл.)
};
Функция
struct tm *localtime(const time_t *ptm);
преобразует календарное время, указанное ptm, сохраняет его в структуре tm и возвращает указатель на нее.
Функция
time_t mktime(struct tm *timeptr);
осуществляет обратное преобразование.
Функция
возвращает наилучшее приближение процессорного времени, прошедшего с момента запуска программы; для получения времени в секундах значение необходимо разделить на константу, определенную в библиотеке time.h:
#define CLOCKS_PER_SEC 1000
Если время не доступно или не может быть представлено, возвращает (clock_t) (-1).
Функция
size_t strftime(
char *restrict s, // указатель на выходную строку
size_t max, // максимальный размер выходной строки
const char *restrict fmt, // указатель на строку формата
const struct tm *restrict tmpt); // указатель на структуру tm
копирует строку fmt в строку s, заменяя спецификаторы формата в fmt соответствующими данными, взятыми из содержимого структуры времени, на которое указывает tmpt; в строку s помещается не более max символов.
Функция возвращает количество символов (исключая нулевой) в результирующей строке. Если результирующая строка (включая нулевой символ) содержит больше, чем max символов, функция возвращает 0, а содержимое s не определено.
Спец. | Назначение |
%a | Локальное сокращенное название дня недели |
%A | Локальное полное название дня недели |
%b | Локальное сокращенное название месяца |
%B | Локальное полное название месяца |
%c | Локальный разделитель даты и времени |
%d | День месяца в виде десятичного числа (01-31) |
%D | Эквивалент %m%d%y |
%e | День месяца (десятичное число): однозначные числа дополнены пробелом |
%F | Эквивалент %Y-%m-%d |
%g | Последние два разряда года (00-99) |
%G | Год в виде десятичного числа |
%H | Часы (по 24-часовой шкале) в виде десятичного числа (00-23) |
%I | Часы (по 12-часовой шкале) в виде десятичного числа (01-12) |
%j | День года в виде десятичного числа (001-366) |
%m | Месяц в виде десятичного числа (01-12) |
%n | Символ новой строки |
%M | Минуты в виде десятичного числа (00-59) |
%p | Локальный эквивалент a.m./p.m. для 12-часовой временной шкалы |
%r | Локальное 12-часовое время |
%R | Эквивалент %H:%M |
%S | Секунды в виде десятичного числа (00-61) |
%t | Символ горизонтальной табуляции |
%T | Эквивалент %H:%M:%S |
%u | Номер дня недели (1-7), где 1 соответствует понедельнику |
%U | Номер недели в году, считая воскресенье первым днем недели (00-53) |
%w | Номер дня недели в виде десятичного числа, начиная с воскресенья (0-6) |
%W | Номер недели в году, считая понедельник первым днем недели (00-53) |
%y | Год без века в виде десятичного числа (00-99) |
%Y | Год с веком в виде десятичного числа |
%z | Смещение от UTC (“-800” означает на 8 ч по Гринвичу западнее). |
%Z | Наименование часового пояса (если доступно) |
%% | % (то есть знак процента). |
Функция, позволяющая вывести день недели на русском языке
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
char * settime(struct tm *u)
{
char s[40];
char *tmp;
for (int i = 0; i<40; i++) s[i] = 0;
int length = strftime(s, 40, “%d.%m.%Y %H:%M:%S “, u);
switch (u->tm_wday)
{
case 0: strcpy(s + length, ” воскресенье”); break;
case 1: strcpy(s + length, ” понедельник”); break;
case 2: strcpy(s + length, ” вторник”); break;
case 3: strcpy(s + length, ” среда”); break;
case 4: strcpy(s + length, ” четверг”); break;
case 5: strcpy(s + length, ” пятница”); break;
case 6: strcpy(s + length, ” суббота”); break;
}
tmp = (char*)malloc(sizeof(s));
strcpy(tmp, s);
return(tmp);
}
int main()
{
struct tm *u;
char *f;
system(“chcp 1251”);
system(“cls”);
const time_t timer = time(NULL);
u = localtime(&timer);
f = settime(u);
printf(“%ld соответствует “, timer);
puts(f);
getchar();
return 0;
}
Результат выполнения
Добавление нескольких дней к текущему времени
Рассмотрим еще один пример. Допустим, требуется добавить несколько дней к текущей дате.
Реализация на Си
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#define ADD_DAYS 300
int main()
{
struct tm *u;
char s1[40] = { 0 }, s2[40] = { 0 };
const time_t timer = time(NULL);
u = localtime(&timer);
strftime(s1, 80, “%d.%m.%Y %H:%M:%S “, u);
printf(“%sn”, s1);
u->tm_mday += ADD_DAYS;
time_t next = mktime(u);
u = localtime(&next);
strftime(s2, 80, “%d.%m.%Y %H:%M:%S “, u);
printf(“%sn”, s2);
getchar();
return 0;
}
Результат выполнения
Реализация функции задержки
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <time.h>
void delay(int ms) // аргумент- требуемое время задержки в миллисекундах
{
int c = clock() + ms;
while (clock() < c);
}
int main()
{
printf(“clock = %dn”, clock());
delay(1000);
printf(“clock = %dn”, clock());
getchar();
return 0;
}
Результат выполнения
Назад: Язык Си