Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
#1

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

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

Возможно ли получить, скажем, текущую секунду системного времени, используя std::chrono, и не опускаясь при этом до уровня time_t?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2013, 13:09
Ответы с готовыми решениями:

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

Ошибки при доступе к компонентам через "->"
btree.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Btree&)’:...

Выводить текущее время в определенные позиции консоли во время работы
Портирую консольное приложение. Есть код, который работал после компиляции в...

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

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

14
programina
2050 / 605 / 41
Регистрация: 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
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2013, 13:27  [ТС] #3
programina, и? Я по-прежнему хочу получить текущую секунду
0
Olivеr
412 / 408 / 95
Регистрация: 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
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2013, 13:32  [ТС] #5
Olivеr, Вы уверены, что это будет именно текущая секунда? А если например проверить с std::chrono::hours для большей наглядности?
0
Olivеr
412 / 408 / 95
Регистрация: 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
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2013, 14:14  [ТС] #7
Olivеr, а почему 12, а не 24? У меня вот например возвращает на 4 меньше, чем текущее (московское время).
0
Olivеr
412 / 408 / 95
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 14:27 #8
Tulosba, посмотрите второй вариант. До него у меня возвращало на 3 меньше, чем текущее.
Не успеваю заскринить, а секунды то идут.
0
Миниатюры
Разложить время по компонентам  
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2013, 14:33  [ТС] #9
Olivеr, ну а часовой пояс если подвигать?
0
Olivеr
412 / 408 / 95
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 14:43 #10
Tulosba, то получится фигня. Надо находить часовой пояс и вычитать/прибавлять его к часам.
1
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2013, 14:47  [ТС] #11
Цитата Сообщение от Olivеr Посмотреть сообщение
Надо находить часовой пояс и вычитать/прибавлять его к часам.
Вот именно. То есть получается без вызова to_time_t() и последующего localtime() вроде бы не обойтись.
0
Olivеr
412 / 408 / 95
Регистрация: 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
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.06.2013, 15:11  [ТС] #13
Olivеr, хе А теперь не помешает посмотреть на пост #1
0
Olivеr
412 / 408 / 95
Регистрация: 06.10.2011
Сообщений: 832
10.06.2013, 15:17 #14
Tulosba, тут же нету преобразования в time_t (to_time_t()). Если совсем совсем без ситайма то надо копать в сторону буста.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
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

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

Следующие формулы разложить по переменной x1, разложить по переменной x2, преобразовать к СДНФ
Следующие формулы 1) разложить по переменной x1, 2) разложить по переменной x2,...

Применение new к компонентам
Как к указателю компонента применить оператор new. Чтобы на форме появился...


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

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

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