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

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

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

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

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

Возможно ли получить, скажем, текущую секунду системного времени, используя std::chrono, и не опускаясь при этом до уровня time_t?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 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/
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 13:27  [ТС]     Разложить время по компонентам #3
programina, и? Я по-прежнему хочу получить текущую секунду
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 13:32  [ТС]     Разложить время по компонентам #5
Olivеr, Вы уверены, что это будет именно текущая секунда? А если например проверить с std::chrono::hours для большей наглядности?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 14:14  [ТС]     Разложить время по компонентам #7
Olivеr, а почему 12, а не 24? У меня вот например возвращает на 4 меньше, чем текущее (московское время).
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 14:27     Разложить время по компонентам #8
Tulosba, посмотрите второй вариант. До него у меня возвращало на 3 меньше, чем текущее.
Не успеваю заскринить, а секунды то идут.
Миниатюры
Разложить время по компонентам  
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 14:33  [ТС]     Разложить время по компонентам #9
Olivеr, ну а часовой пояс если подвигать?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 14:43     Разложить время по компонентам #10
Tulosba, то получится фигня. Надо находить часовой пояс и вычитать/прибавлять его к часам.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 14:47  [ТС]     Разложить время по компонентам #11
Цитата Сообщение от Olivеr Посмотреть сообщение
Надо находить часовой пояс и вычитать/прибавлять его к часам.
Вот именно. То есть получается без вызова to_time_t() и последующего localtime() вроде бы не обойтись.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
Может так подойдет?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 15:11  [ТС]     Разложить время по компонентам #13
Olivеr, хе А теперь не помешает посмотреть на пост #1
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
10.06.2013, 15:17     Разложить время по компонентам #14
Tulosba, тут же нету преобразования в time_t (to_time_t()). Если совсем совсем без ситайма то надо копать в сторону буста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2013, 15:46     Разложить время по компонентам
Еще ссылки по теме:

C++ Записи. Дано время t1 и время t2. Определить, сколько времени пройдет от t1 до t2
C++ Разложить число на простые множители
C++ Ввести время и от него отнять системное время
Как присвоить 10 компонентам сразу значения из массива? C++
C++ Разложить ряд

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.06.2013, 15:46  [ТС]     Разложить время по компонентам #15
Olivеr, так вариант с поиском часового пояса (всё равно использование типа time_t) ещё хуже, чем явный вызов to_time_t(). Просто была смутная надежда, что в C++11 можно без этого обойтись.
Yandex
Объявления
10.06.2013, 15:46     Разложить время по компонентам
Ответ Создать тему
Опции темы

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