Заблокирован

Представление time_t

06.11.2015, 18:33. Показов 17043. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как представлено число time_t? я имею ввиду порядок данных в нем, где год, где месяц и т.д. насколько я понимаю по 1 байту занимают год (от 1970), месяц, день, час, минута и секунда, а миллисекунды 2 байта, итого 8, вот только не пойму в каком порядке они там идут... делу не способствует также странный результат функции time, она возвращает например вот только что 1446823461, то есть у числа все верхние 4 байта забиты нулями... странно это, при том localtime_s все равно нормально время возвращает из этого числа...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.11.2015, 18:33
Ответы с готовыми решениями:

Перевод time_t в tm C++
Я чот не могу понять, почему, когда я перевожу time_t со значением 26331 в tm, я вместо того, что бы получить 1970-01-01 10:18:51,...

из string в time_t
Подскажите пожалуйста можно ли преобразовать string в time_t?

тип time_t
Нужно ввести 2 переменные типа time_t с клавиатуры , потом переконвертировать их в строки и записать в файл. В процессе исполнения...

23
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.11.2015, 18:41
Volrajas, time_t - это тип данных используется для представления целого числа — количества секунд, прошедших после полуночи 00:00 , 1 января 1970 года в формате GMT. Т.е. обычный целочисленный тип данных.
1
Заблокирован
06.11.2015, 18:54  [ТС]
Kerry_Jr, ааа, а я думал там в самом числе они закодированы

Добавлено через 9 минут
я вот только думаю а как оно кодирует если год меньше 1970?

Добавлено через 50 секунд
C++
1
2
3
4
5
6
7
8
9
10
tm tm{ 0 };
tm.tm_year = 1000;
tm.tm_mon = 6;
tm.tm_mday = 15;
tm.tm_hour = 12;
tm.tm_min = 30;
tm.tm_sec = 30;
time_t t = mktime(&tm);
memset(&tm, 0, sizeof tm);
localtime_s(&tm, &t);
и ведь не подкопаешься, работает, а вот как не врубаюсь чет...
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.11.2015, 18:54
Volrajas, отрицательные числа никто не отменял.
0
Заблокирован
06.11.2015, 18:56  [ТС]
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Volrajas, отрицательные числа никто не отменял.
в смысле отрицательные? где тут отрицательные числа? time_t это unsigned long long беззнаковое 64х битное число
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.11.2015, 20:18
Volrajas, если вы напишете
C++
1
cout << t;
то выведется -1. По крайней мере у меня так. Хотя я с этим пока толком не разбирался. Будем посмотреть.

Добавлено через 3 минуты
mktime в случае ошибки возвращает -1.
0
Заблокирован
06.11.2015, 20:29  [ТС]
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
то выведется -1. По крайней мере у меня так. Хотя я с этим пока толком не разбирался. Будем посмотреть.
какой компилятор? у меня в visual studio нет такого, все выводит нормально
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.11.2015, 20:48
2900-й год в Visual Studio показывает.
0
Заблокирован
06.11.2015, 20:51  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
2900-й год в Visual Studio показывает.
Б - Брехня (с)
Миниатюры
Представление time_t  
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.11.2015, 21:26
Volrajas, есть и вижуал, но для коротышек использую MinGW 4.9.2. Попробовал даты после 1970, все равно не работает. Не пойму почему.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.11.2015, 21:35
Вот это выведет 2900-й год:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main() {
    // your code goes here
    tm tm;
tm.tm_year = 1000;
tm.tm_mon = 6;
tm.tm_mday = 15;
tm.tm_hour = 12;
tm.tm_min = 30;
tm.tm_sec = 30;
time_t t = mktime(&tm);
printf ("The current time is: %s", ctime (&t));
 
    system("pause");
 
    return 0;
}
0
Заблокирован
06.11.2015, 21:42  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Вот это выведет 2900-й год:
хз я такой не пользуюсь, да действительно выводит 2900, хз может багнутая какая то функция... и все же mktime работает верно... короче мне просто сейчас интересно как же все таки возможно указание года до 1970 если число в time_t указывает количество секунд от 1970 года до сейчасшнего момента?
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
06.11.2015, 23:29
В tm можешь что угодно указывать, а time_t только с 1970.
0
 Аватар для ASCII
99 / 70 / 13
Регистрация: 15.12.2013
Сообщений: 463
07.11.2015, 00:13
Ну хранение года в одном байте в принципе невозможно, ибо в подавляющем большинстве машин байт - 8 бит.
А это значит - 2^8 = 256, нуль тоже входит, поэтому максимальное число, которое может храниться в одном байте - 255.
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
07.11.2015, 00:29
struct tm странная вещь, вроде и указано что год нужно задавать учитывая что к нему будет прибавлено 1900, однако, при задании значения меньшего "0:00:00 01:01:1970 GMT" mktime завершится ошибкой (time_t будет равен -1). Т.е. для функции mktime и часового пояса +3 часа минимальное значение будет таково:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
tm tm1;
memset(&tm1, 0, sizeof(tm));
tm1.tm_year = 70;
tm1.tm_mon = 0;
tm1.tm_mday = 1;
tm1.tm_hour = 3;
tm1.tm_min = 0;
tm1.tm_sec = 0;
 
time_t time1 = mktime(&tm1);
if (time1 > -1) 
    cout << ctime(&time1) << "Кол-во секунд: " << time1 << endl;
system("pause");
В 2015 студии размер time_t = 8 байтам, что делает верхнюю границу практически бесконечной. Раньше был 4 байта, и по этому поводу всё ещё актуальна "проблема 2038" (для систем на 32-хбитном time_t)

Добавлено через 7 минут

Не по теме:

ps: В 8 байтах уже можно спокойно считать такты (100 наносек. интервалы), хвтит на 10000 лет точно и ещё один бит для зимнего времени останется :D

0
Заблокирован
07.11.2015, 09:23  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
В tm можешь что угодно указывать, а time_t только с 1970.
то то и оно что когда я указываю в tm год меньше 1970, а потом делаю mktime и из полученного числа снова извлекаю time_t с помощью localtime у меня оно не меняется, т.е. по прежнему в нем указанный год (даже если он меньше 1970), вот что интересно
Цитата Сообщение от ASCII Посмотреть сообщение
Ну хранение года в одном байте в принципе невозможно, ибо в подавляющем большинстве машин байт - 8 бит.
А это значит - 2^8 = 256, нуль тоже входит, поэтому максимальное число, которое может храниться в одном байте - 255.
к чем щас это было сказано вообще? кажется уже все поняли что в числе time_t хранится количество секунд

Добавлено через 1 минуту
Цитата Сообщение от Operok Посмотреть сообщение
struct tm странная вещь, вроде и указано что год нужно задавать учитывая что к нему будет прибавлено 1900, однако, при задании значения меньшего "0:00:00 01:01:1970 GMT" mktime завершится ошибкой (time_t будет равен -1).
дак ведь нет же!!! у меня не завершается с ошибкой, у меня возвращает нормальное число time_t (заполненнные биты правда перелезают за 4 байта), а из него с помощью localtime я получаю исходную tm
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
07.11.2015, 10:13
Цитата Сообщение от Volrajas Посмотреть сообщение
дак ведь нет же!!! у меня не завершается с ошибкой, у меня возвращает нормальное число time_t (заполненнные биты правда перелезают за 4 байта), а из него с помощью localtime я получаю исходную tm
Какое значение задаёте полю tm_year в структуре tm, 1000? Если да, то вы указываете 2900 год. Естественно, если вы конвертируете time_t обратно в tm, там опять будет значение 1000 (что соответствует 2900-му году). Используйте функцию ctime(const time_t*)
0
Заблокирован
07.11.2015, 10:40  [ТС]
Цитата Сообщение от Operok Посмотреть сообщение
Какое значение задаёте полю tm_year в структуре tm, 1000? Если да, то вы указываете 2900 год. Естественно, если вы конвертируете time_t обратно в tm, там опять будет значение 1000 (что соответствует 2900-му году).
да как так может быть то объясните мне? как именно работают mktime и localtime? и что значит "соответствует" 2900 году? откуда вам знать чему оно соответствует если фактически год можно узнать только через структуру tm
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
07.11.2015, 10:47
Цитата Сообщение от Volrajas Посмотреть сообщение
откуда вам знать чему оно соответствует...
Временная структура tm и Тип данных time_t - меньше минуты в гугле
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.11.2015, 15:03
Ну переполнение какое-нибудь происходит или ещё что-то, и возникает такой эффект.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2015, 15:03
Помогаю со студенческими работами здесь

Менять дату в time_t
Всем привет. Как-то можно тут изменить дату? В идеале добавить или отнять несколько секунд, чтобы изменилась дата time_t seconds;...

C++ конвертировать char* в time_t
Всем привет. Помогите, пожалуйста разобраться, как нормально конвертировать char* (время полученное с сервера) в time_t. Нашел вариант для...

Преобразование 'time_t' в 'unsigned int'
Массив предназначен для хранения значений ростов двенадцати человек. С помощью датчика случайных чисел заполнить массив целыми значениями,...

Работа со временем: заполнение time_t вручную
как грамотно заполнить #include &lt;ctime&gt; time_t структуру ? вручную надо дату забить

Time_t to tm, localtime возвращает tm с неверными значениями
Не могу перевести время из time_t полученное в результате выполнения функции difftime в tm для дальнейшей обработки time_t resInSec =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Тестирование Pull Request в Kubernetes с vCluster
Mr. Docker 19.07.2025
Часто сталкиваюсь с серьезной дилемой при настройке тестовых окружений для проверки Pull Request в Kubernetes. С одной стороны, каждый PR требует изолированной среды — только так можно гарантировать,. . .
Мой 7 минутный ролик с крамольным предложением про шахматы, предлагаю заценить
_Ivana 18.07.2025
p2UhJNMGY94
Десять Middleware Node.js для эффективного кодинга
Reangularity 18.07.2025
Когда я только начинал работать с Node. js, количество пакетов в npm меня буквально парализовало. Сегодня их больше 1,3 миллиона — попробуй разберись, что стоит твоего внимания, а что нет. Я потратил. . .
Context и глубины Android
mobDevWorks 18.07.2025
В Android разработки Context напоминает воздух - он везде, жизненно необходим, но мало кто может детально объяснить его природу. Мы привыкли получать его как параметр, передавать дальше и. . .
Результаты исследования от команды MCM (июль 2025 г.)
Programma_Boinc 18.07.2025
Результаты исследования от команды MCM (июль 2025 г. ) Как сообщалось в наших предыдущих публикациях, мы изучаем гены, которые имеют наибольший рейтинг и ассоциируются с различными видами рака, в. . .
ИИ-чатбот на React с OpenAI и LangChain.js
Reangularity 17.07.2025
React давно стал для меня золотым стандартом фронтенд-разработки. Его компонентная структура, виртуальный DOM и однонаправленный поток данных идеально подходят для создания динамичных интерфейсов. . .
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru