С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
1

Получение времени в С++, time.h

02.01.2016, 17:46. Показов 7712. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Сталкиваюсь с проблемой получения времени.
Под запись в БД мне необходимо получить именно СЕКУНДЫ, а не дату, и записать их в строку.
Получать необходимо много раз, поэтому используется цикл while
Делаю так:
C++
1
2
3
4
5
6
std::stringstream ss;
while (true)
{
ss.clear();
ss << time(NULL);
}
Как-то так. Не кидайтесь особо тапками, я новичок.
В общем в чем проблема - время не всегда записывается как нужно. т.е. строка буквально не всегда чистится, и новое полученное время приписывается к старому.

Как решить мою проблему ? Еще раз повторю, что мне нужны именно секунды, и стандартные функции преобразования времени мне не помогут.

Всем спасибо
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2016, 17:46
Ответы с готовыми решениями:

Не могу разобраться с заданием "Создайте класс Time с конструкторами Time(), Time( int hour)......"
/* Создайте класс Time с конструкторами Time(), Time( int hour), Time(int hour, int min),...

Получение времени года по введенному пользователем месяцу
Решить с помощью оператора Case. Написать программу, которая запрашивает у пользователя номер...

Compile-time и run-time методы и функции
Добрый день. Есть две функции, которые делают идентичную работу: template&lt;bool leftShift,...

Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time ().
Помогите пожалуйста написать программу на С++. Просто скоро курсовую сдавать, а классы мы еще не...

21
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
02.01.2016, 18:04 2
Си
http://ru.cppreference.com/w/c/chrono/ctime
C++
http://ru.cppreference.com/w/cpp/chrono/c/time
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
02.01.2016, 18:06  [ТС] 3
я же повторился - мне нужно количество СЕКУНД с начала эпохи Unix
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
02.01.2016, 18:14 4
если вам и реально влом по ссылке пример глянуть, то ...
C++
1
2
3
4
5
6
7
8
9
#include <ctime>
#include <iostream>
 
int main()
{
    std::time_t result = std::time(NULL);
    std::cout << std::asctime(std::localtime(&result))
              << result << " seconds since the Epoch\n";
}
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
02.01.2016, 18:26  [ТС] 5
Оп, извиняюсь, не заметил.
Что-то вот непонятно, а как это под цикл подстроить ? Получается, что объявить переменную до цикла надо, а в цикле надо ее чистить и записывать.
Для меня код примера страшен блин
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
02.01.2016, 19:08 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <ctime>
#include <iostream>
 #include <chrono>
#include <thread>
 
 
    
    
int main()
{
   
    
    std::time_t result = std::time(NULL);
    while (true)
    {
    std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    result = std::time(NULL);
    std::cout << result << " seconds since the Epoch\r";
    }
return 0;
}
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
02.01.2016, 19:49  [ТС] 7
Как-то объемно все..
Код на линуксе работать вообще будет..
Зачем тут chrono ? Ничего не понятно.. Какой день пытаюсь разобраться, да информации мало очень..
зачем вообще эта строка?:
C++
1
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
02.01.2016, 20:01 8
Цитата Сообщение от zheckster Посмотреть сообщение
Как-то объемно все..
5 строк - объемно?

Цитата Сообщение от zheckster Посмотреть сообщение
Зачем тут chrono ? Ничего не понятно.. Какой день пытаюсь разобраться, да информации мало очень..
зачем вообще эта строка?:
C++Выделить код
1
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
попробуйте закомментировать эту строку и увидите
она вызывает программу 1 раз в 1 секунду
C++
1
2
3
4
5
6
7
std::time_t result; // объявляем переменную для хранения секунд с эпохи юникс
    while (true) // бесконечный цикл
    {
    std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // задержка на 1 сек (1000 милисек) иначе цикл будет крутиться каждый такт, что нам не надо. 1 раз в сек вызывается.
    result = std::time(NULL); // получаем время
    std::cout << result << " seconds since the Epoch\r"; // выводим время в консоль
    }
Цитата Сообщение от zheckster Посмотреть сообщение
Код на линуксе работать вообще будет..
это вопрос, я так понимаю.
ответ:"попробуйте".
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
02.01.2016, 22:28 9
Лучший ответ Сообщение было отмечено zheckster как решение

Решение

Цитата Сообщение от zheckster Посмотреть сообщение
строка буквально не всегда чистится
Вот это не очистка строки:
Цитата Сообщение от zheckster Посмотреть сообщение
ss.clear();
Строка так чистится:
C++
1
ss.c_str("");
Миниатюры
Получение времени в С++, time.h  
1
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
03.01.2016, 08:35 10
Цитата Сообщение от nord_v Посмотреть сообщение
строка буквально не всегда чистится
осбенно если
C++
1
<< endl
вставлять, то она вообще чиститься не будет
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.01.2016, 09:02 11
Цитата Сообщение от zheckster Посмотреть сообщение
В общем в чем проблема - время не всегда записывается как нужно. т.е. строка буквально не всегда чистится, и новое полученное время приписывается к старому.
Для stringstream clear чистит не строку, а флаги ошибки. Унесите std::stringstream ss; внутрь цикла и всего делов.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
03.01.2016, 09:51 12
Цитата Сообщение от SergioO Посмотреть сообщение
осбенно если
C++
1
<< endl
вставлять, то она вообще чиститься не будет
Куда вставлять?
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
03.01.2016, 14:22  [ТС] 13
Для stringstream clear чистит не строку, а флаги ошибки. Унесите std::stringstream ss; внутрь цикла и всего делов.
Разве не будет ли она каждый раз создаваться ? И при этом не будет удаляться.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.01.2016, 14:55 14
Цитата Сообщение от zheckster Посмотреть сообщение
Разве не будет ли она каждый раз создаваться ? И при этом не будет удаляться.
По завершении итерации, все переменные созданные в теле цикла будут прибиваться. А потом, при начале новой итерации, таки да, пересоздаваться. Так что никаких утечек памяти не будет.
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
03.01.2016, 15:31  [ТС] 15
В итоге я сделал так:

C++
1
2
3
4
5
6
7
std::stringstream ss;
//тут различные действия, а дальше нужное мне получение:
while(true)
{
ss.str("");
ss << time(NULL);
}
Правильным ли будет данный вариант? Вроде бы как все работает.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.01.2016, 15:39 16
Цитата Сообщение от zheckster Посмотреть сообщение
Правильным ли будет данный вариант? Вроде бы как все работает.
Ну, в принципе, да. Кстати, если нужно только это, std::to_string не устроит (нужна включенная поддержка C++11)?
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
03.01.2016, 18:36  [ТС] 17
Нет, С++ 11 что-то не пашет у меня. Стоит debian 7.
Да я и не понимаю еще, зачем он. Буквально неделю назад приступил к С++.
Это мой первый опыт в объектно-ориентированном, до этого только на процедурных языках писал.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.01.2016, 19:26 18
Цитата Сообщение от zheckster Посмотреть сообщение
Нет, С++ 11 что-то не пашет у меня. Стоит debian 7.
Его включать надо. Если пользуетесь QtCreator, то добавьте в pro файл строчку QMAKE_CXXFLAGS += -std=c++11 . Часть возможностей C++11 доступна только в пакетах из Джесси, но именно std::to_string есть и в Уизи. Компилятор из Джесси, кстати, можно и на седьмой Дебиан поставить:
В /etc/apt/sources.list
deb http://ftp.us.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.us.debian.org/debian/ jessie main contrib non-free

В /etc/apt/apt.conf (чтобы не попыталось выкачать всю Джесси)
APT::Default-Release "wheezy";

После чего в консоли от суперпользователя:
apt-get update
apt-get -t jessie install g++ gdb
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 24
03.01.2016, 20:09  [ТС] 19
У меня g++ и стоит.
Под ним все компилится и работает. Я просто к чему спрашиваю - это нормальный вариант получения времени ? Тот, что выше написал.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.01.2016, 20:25 20
Цитата Сообщение от zheckster Посмотреть сообщение
У меня g++ и стоит.
Ага, g++ 4.7. То что я написал - обновляет до 4.9.
Цитата Сообщение от zheckster Посмотреть сообщение
Я просто к чему спрашиваю - это нормальный вариант получения времени ?
Нормальный, но более громоздкий, да и при извлечении строки получится лишнее копирование (stream.str() вернет копию строки, to_string - использует перемещающий конструктор).
1
03.01.2016, 20:25
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2016, 20:25
Помогаю со студенческими работами здесь

Класс Time через time(0)
Всем привет. На форуме искал ничего похожего не нашол. Не могу до конца разобраться. В класе 1...

Класс "Время". Двусмысленность между time и std:time(long*)
Здравствуйте. Дали код, сказали есть проблема(скриншот): http://********/12MxOENhw14QmJ Код: ...

Что за ошибка: "E2015 Ambiguity between 'time' and 'std::time"?
Коды ошибок: v8.cpp(132): E2015 Ambiguity between 'time' and 'std::time(long *)' v8.cpp(133):...

Что за ошибка: "E2015 Ambiguity between 'time' and 'std::time"?
Коды ошибок: v8.cpp(132): E2015 Ambiguity between 'time' and 'std::time(long *)' v8.cpp(133):...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru