С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 129

Работа с ctime

12.06.2024, 11:26. Показов 1286. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с библиотекой ctime.
Вот есть функция localtime() преобразующее время из формата unix в строковый формат. Пытаюсь воспользоваться:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <ctime>
 
int main()
{
    int unixtime = 1718139600;
    std::wcout << localtime(&unixtime) << "\n";
    return 0;
}
и получаю ошибку потому что аргумент должен быть типа const time_t*, а он у меня int*
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2024, 11:26
Ответы с готовыми решениями:

Работа с библиотекой ctime
У нас есть настоящее время которое было взято из системы 02.06.2024, нужно из даты выделить число 02062024 или 262024 в дальнейшем данное...

Пример с CTIME
покажите пожалуйста пример с ctime в Си (*.C)

ctime файла
Доброго дня! Есть файл test. ВременнЫе атрибуты можно получить, введя в консоль stat test. А как получить ctime программно?

19
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,813
12.06.2024, 11:35
https://en.cppreference.com/w/... /localtime

Там пример использования есть внизу.
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
12.06.2024, 11:46
Возможно вам нужен такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <ctime>
 
int main()
{
    //Переменная для сохранения текущего системного времени
   long int s_time;
   //Указатель, в который будет помещен адрес структуры с
   //преобразованным временем
   struct tm *m_time;
   //Считываем текущее системное время
   s_time = 1718139600;
   //Преобразуем системное время в локальное
   m_time  = localtime (&s_time);
   // С помощью функции asctime преобразуем локальное время в строку
   // и выводим результат на консоль
   std::cout << std::asctime(m_time);
}
0
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
12.06.2024, 12:16

Или я дурак, или лыжи не едут....
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
12.06.2024, 12:23
Наталья8, измени значение переменной и узнаешь
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.06.2024, 12:49
Цитата Сообщение от Isur Посмотреть сообщение
получаю ошибку потому что аргумент должен быть типа const time_t*, а он у меня int*
Ну и в чем дело?
Сделайте time_t, как просит.

Добавлено через 3 минуты
Цитата Сообщение от ram876 Посмотреть сообщение
long int s_time;
Тоже непонятная какая-то тяга делать все через задницу.
Тип time_t почему настойчиво игнорируете?
1
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
12.06.2024, 13:19
Цитата Сообщение от DrOffset Посмотреть сообщение
Тоже непонятная какая-то тяга
Я видел примеры по ссылке из поста 2, но я подумал, что раз ТС написал на int, оставить тип из примера по Си, может ему такой пример понадобился, а современный пример по ссылке уже есть. К тому же я никогда не работал с этой библиотекой, увидел рабочий пример, немного скорректировал и запостил.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.06.2024, 13:26
ram876, time_t здесь нужен всегда, он не современный, он просто правильный.
Например ваш код не компилируется в msvc (x86) c ошибкой
error C2664: 'tm *localtime(const time_t *const )': cannot convert argument 1 from 'long *' to 'const time_t *const '
https://godbolt.org/z/TrYxK8eb5
1
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
12.06.2024, 13:28
Цитата Сообщение от Donkix Посмотреть сообщение
измени значение переменной и узнаешь
А смысл?

Это чудо число вообще не гуглиться...
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.06.2024, 13:31
Наталья8, зачем его гуглить? Это ж просто какое-то конкретное время для примера.
1
 Аватар для Наталья8
519 / 369 / 66
Регистрация: 09.03.2016
Сообщений: 3,898
12.06.2024, 13:35
DrOffset,
В секундах? Понял.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.06.2024, 13:38
Цитата Сообщение от Наталья8 Посмотреть сообщение
В секундах? Понял.
Ага. От 1 января 1970 года.
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,348
12.06.2024, 16:13
DrOffset, а почему Unix эпоха начинается именно с этой даты? Спрашиваю вас, ибо возможно вы знаете. Это просто договоренность или связано с каким-то событием?
0
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 129
12.06.2024, 16:27  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Тоже непонятная какая-то тяга делать все через задницу.
Тип time_t почему настойчиво игнорируете?
Потому что это - условия задачи, что исходные данные поступают в виде типа int. Кстати сделать переменную unixtime типа const time_t пробовал, в этом случае вылезает ошибка, что функция localtime является unsafe.
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,012
12.06.2024, 16:41
Royal_X, https://obzorposudy.ru/polezno... voe-vremya
https://ru.linux-console.net/?p=13051
https://habr.com/ru/articles/695688/
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.06.2024, 16:48
Royal_X, вообще отсчет изначально был от 1971 года, этот год выбрали как ближайшее начало года на тот период. Если не ошибаюсь, документация, в которой это впервые было описано, датировалась 3 ноября 1971, потому отсчет сместили на 1 января 1971. И время от этой даты считалось не в секундах, а в интервалах 1/60 секунды (с числом 60 тоже много всяких исторических фактов связано, но это ладно). При использовании интервалов 1/60 секунды, 32-битное число могло представлять промежуток менее 829 дней (именно поэтому они взяли 71-й год, а не, скажем, 70-й).
Чуть позже представление перевели на уже привычные нам секунды, что позволило использовать 32-итное число для хранения гораздо большого количества времени (экономить года отсчета больше не было смысла), а дату 1970 согласовали просто потому, что она была ближайшей круглой датой к 1971.

Добавлено через 3 минуты
Цитата Сообщение от Isur Посмотреть сообщение
Потому что это - условия задачи, что исходные данные поступают в виде типа int.
Какая разница как поступают данные? Они могут поступать хоть в строке, хоть в double. Ваша задача перед передачей в locatime сделать преобразование этих данных в time_t и передать указатель на time_t. Вот и все.

Добавлено через 59 секунд
Цитата Сообщение от Isur Посмотреть сообщение
в этом случае вылезает ошибка, что функция localtime является unsafe.
Но это же другая совсем проблема. Разве вы не понимаете этого?
'localtime': This function or variable may be unsafe
1
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
12.06.2024, 17:45
Цитата Сообщение от Isur Посмотреть сообщение
Кстати сделать переменную unixtime типа const time_t пробовал, в этом случае вылезает ошибка
Блин, чувак, ты зачем вообще всем этим занимаешься? Хочешь стать программистом?
Ну тогда заканчивай эту дичь думать:
"Ололо я решаю проблему, возникает еще одна и я не читаю, не разбираюсь, я даже не вникаю что произошло, а сразу же думаю, что пошел по неверному пути, все бросаю и опускаю руки".
Прям наиболее проигрышная позиция из всех возможных, и у каждого второго новичка она такая. Если ты это как-то не решишь, просто останешься профнепригодным.
0
2 / 2 / 2
Регистрация: 29.06.2018
Сообщений: 129
12.06.2024, 23:12  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Ваша задача перед передачей в locatime сделать преобразование этих данных в time_t и передать указатель на time_t
Это как преобразовать, через скобочку что ли? Ну вот так работает:
C++
1
2
3
4
5
6
7
8
9
10
11
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <ctime>
 
int main()
{
    int unixtime = 1718139600;
    const time_t unixtimetimet = (const time_t)unixtime;
    std::wcout << std::asctime(localtime(&unixtimetimet)) << "\n";
    return 0;
}
Я поначалу вместо скобочки искал нет ли в библиотеке функции, которая преобразовывает из int, и не найдя такую написал сюда. Смысл кстати так и не понял, зачем авторы стандартной библиотеки тут и ещё много где насоздавали типов, которые по своему внутреннему содержанию являются int, но называются по своему и использовать int будет ошибкой.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6147 / 2840 / 1040
Регистрация: 01.06.2021
Сообщений: 10,348
12.06.2024, 23:24
Isur, например, у меня time_t это не что иное, как long long.
Т.е. код ТС работает, если поменять int -> long long int

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <ctime>
 
int main()
{
    long long unixtime = 1718139600;
    std::wcout << localtime(&unixtime) << "\n";
    return 0;
}
Однако, люди правы, когда говорят, что нужно использовать time_t. Ведь у меня time_t это long long, а другого человека может быть просто long.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.06.2024, 23:54
Цитата Сообщение от Isur Посмотреть сообщение
смысл кстати так и не понял, зачем авторы стандартной библиотеки тут и ещё много где насоздавали типов, которые по своему внутреннему содержанию являются int, но называются по своему и использовать int будет ошибкой.
int - это конкретная его репрезентация. Где-то она может быть иной. "Насоздавали", как вы выразились, для переносимости.
Считайте, что это такая инкапсуляция.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2024, 23:54
Помогаю со студенческими работами здесь

Использование time.h (ctime)
Как переменной struct tm mytime задать произвольную дату, например, (2015-1-1 00:00)? time_ref.tm_year = 115; mytime.tm_mon = 0; ...

iomanip -> ::ctime has not been declared
внезапно, что то слетело в подключаемых GCC стандартных либах выяснилось что дело в &lt;iomanip&gt; вот небольшой код пример с данной...

Вывод времени: ctime
Много искал как можно вывести время в консоли с++. Но во всех случаях одна ошибка: ctime не работает. Как это можно исправить?

Как работать с <ctime>?
Добрый день! почему получаю аварийное завершение ? #include &lt;ctime&gt; using namespace std; int _tmain(int argc, _TCHAR*...

Вставка ctime и заполнения массива рандомом
Здравствуйте.Тут такая ситуация - у меня есть программка, которая выполняет сортировку одномерного массива методом слияния.Туда надо...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru