Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
#1

Разложить время по компонентам - C++

10.06.2013, 13:09. Просмотров 762. Ответов 14
Метки нет (Все метки)

Возможно ли получить, скажем, текущую секунду системного времени, используя std::chrono, и не опускаясь при этом до уровня time_t?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 13:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разложить время по компонентам (C++):

Как присвоить 10 компонентам сразу значения из массива? - C++
Есть на форме 10 компонентов Clabel,в них есть поле Caption,в которое и нужно присвоить значения. Суть в том,что бы не писать 10 строк...

Выводить текущее время в определенные позиции консоли во время работы - C++
Портирую консольное приложение. Есть код, который работал после компиляции в BC++ 3.1, после компиляции под MinGW GCC программа не...

Записи. Дано время t1 и время t2. Определить, сколько времени пройдет от t1 до t2 - C++
Дано время t1 и время t2. Гарантируется, что t1 и t2 -время одного дня, а также что t1<t2. Определить, сколько времени пройдет от t1 до t2....

Функция: Написать функцию next(t, t1, d), которая присваивает параметру t1 время на d секунд больше, чем время t. - C++
Прошу помочь. Ввести структуру time с полями часы, минуты, секунды. Составить и протестировать функции: next(t, t1, d), которая...

[Время] Требуется разложить секунды - PHP
Здравствуйте, я делаю игровой проект с личным кабинетом на PHP, так у меня есть строчка с информацией о том, сколько еще игрок будет...

Вопрос по компонентам - 1С Битрикс
Я хочу сделать раздел услуг. Поступаю так: * создаю инфоблок * на страницу включаю подходящий компонент, "новости" думаю подойдет *...

14
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.06.2013, 13:24 #2
Tulosba,
C++
system_clock::time_point today = system_clock::now();
www.cplusplus.com/reference/chrono/system_clock/
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 13:27  [ТС] #3
programina, и? Я по-прежнему хочу получить текущую секунду
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 13:27 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <chrono>
 
using namespace std;
using namespace std::chrono;
 
int main()
{
    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();
    seconds s = duration_cast<seconds>(tp);
    cout << s.count() % 60;
}
System clock
Clock classes provide access to the current time_point.

Specifically, system_clock is a system-wide realtime clock.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 13:32  [ТС] #5
Olivеr, Вы уверены, что это будет именно текущая секунда? А если например проверить с std::chrono::hours для большей наглядности?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 14:11 #6
Tulosba, не могу точно сказать, но текущее время достается из ОС.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <chrono>
 
using namespace std;
using namespace std::chrono;
 
int main()
{
    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();
    hours s = duration_cast<hours>(tp);
    cout << s.count() % 12;
}
Но для уверенности проверять все равно нужно.

Добавлено через 35 минут
UPD
вот так у меня работает и выводит правильные результаты
пробовал менять время на винде, программа действительно выводит время по ОС
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <chrono>
 
using namespace std;
using namespace std::chrono;
 
int main()
{
    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();
 
    hours h = duration_cast<hours>(tp);
    cout << "current hour " << (h.count() % 24 + 3 ) % 24 << endl;
    seconds s = duration_cast<seconds>(tp);
    cout << "seconds " << s.count() % 60;
}
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 14:14  [ТС] #7
Olivеr, а почему 12, а не 24? У меня вот например возвращает на 4 меньше, чем текущее (московское время).
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 14:27 #8
Tulosba, посмотрите второй вариант. До него у меня возвращало на 3 меньше, чем текущее.
Не успеваю заскринить, а секунды то идут.
0
Миниатюры
Разложить время по компонентам  
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 14:33  [ТС] #9
Olivеr, ну а часовой пояс если подвигать?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 14:43 #10
Tulosba, то получится фигня. Надо находить часовой пояс и вычитать/прибавлять его к часам.
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 14:47  [ТС] #11
Цитата Сообщение от Olivеr Посмотреть сообщение
Надо находить часовой пояс и вычитать/прибавлять его к часам.
Вот именно. То есть получается без вызова to_time_t() и последующего localtime() вроде бы не обойтись.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 15:02 #12
Нашел на каком-то форуме функцию нахождения часового пояса:
C++
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
#include <iostream>
#include <chrono>
 
using namespace std;
using namespace std::chrono;
 
int getUTCoffset()
{
    time_t currtime;
    struct tm * timeinfo;
    time ( &currtime );
    timeinfo = gmtime ( &currtime );
    time_t utc = mktime( timeinfo );
    timeinfo = localtime ( &currtime );
    time_t local = mktime( timeinfo );
 
    // Get offset in hours from UTC
    double offsetFromUTC = difftime(utc, local) / 3600;
 
    // Adjust for DST
    if (timeinfo->tm_isdst)
        offsetFromUTC -= 1;
    return static_cast<int>(offsetFromUTC);
}
 
int main()
{
    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();
 
    int offsetFromUTC = getUTCoffset();
 
    hours h = duration_cast<hours>(tp);
    cout << "current hour " << ( (h.count() - offsetFromUTC) % 24 ) % 24 << endl;
 
    seconds s = duration_cast<seconds>(tp);
    cout << "seconds " << s.count() % 60;
}
Может так подойдет?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 15:11  [ТС] #13
Olivеr, хе А теперь не помешает посмотреть на пост #1
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 15:17 #14
Tulosba, тут же нету преобразования в time_t (to_time_t()). Если совсем совсем без ситайма то надо копать в сторону буста.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.06.2013, 15:46  [ТС] #15
Olivеr, так вариант с поиском часового пояса (всё равно использование типа time_t) ещё хуже, чем явный вызов to_time_t(). Просто была смутная надежда, что в C++11 можно без этого обойтись.
0
10.06.2013, 15:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2013, 15:46
Привет! Вот еще темы с ответами:

Вопрос по компонентам - Delphi БД
1) Подскажите, при помощи какого компонентам в Delphi 2009 можно подключиться к двум БД Access одновременно? 2) В Delphi 7 есть такая...

Применение new к компонентам - C++ Builder
Как к указателю компонента применить оператор new. Чтобы на форме появился новый компонент во время выполнения программы.Например: ...

Входной по компонентам. - Delphi
При щелчке по кнопке все элементы передвинулись к левому краю формы.

Обращение к компонентам из функции - C++ Builder
В процессе работы на проектом решил переделать часть кода в функции и в обработчиках событий их вызывать. Но возникла такая вот проблема:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru