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

Превратить дату в минуты

10.01.2014, 13:26. Показов 1133. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть дата вот такого типа:
year = 2013
mounth = 10
day = 15
Ее нужно перевести в минуты. В принципе не трудно, но мне не получается..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2014, 13:26
Ответы с готовыми решениями:

Программа, которая переводит часы и минуты в минуты или минуты – в часы и минуты
Составьте программу, которая в зависимости от входных данных переводит часы и минуты в минуты или минуты – в часы и ...

Превратить заданную пользователем дату в формате "дд.мм.гг" в формат "месяц дд. год"
Помогите пожалуйста написать программу на рядки. Условие Превратить заданную пользователем дату в формате "дд.мм.гг" в формат...

Как превратить дату в varchar с добавлением ведущих нулей?
В stored procedure я получаю дату из таблицы. Например 1 Mar 2006. Или 01/03/2006 и т.п. Мне нужно эту дату превратить в стринг 01032006...

16
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
10.01.2014, 14:44
Цитата Сообщение от Insane__ Посмотреть сообщение
Ее нужно перевести в минуты.
Т.е. сколько минут прошло с начала года до этой даты или сколько минут в 2013 годах, 10 месяцах и 15 дней?
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 15:02  [ТС]
Нужно решить вот такую ​​задачу:

http://www.e-olimp.com/ru/problems/4552

Сначала я перевожу всю дату в минуты, затем нахожу разницу этих дат, и от этой разницы отнимаю по 15 до тех пор пока разница не будет меньше 15. И соответственно сколько раз я отнял столько и "пробъют" часы. Но почему-то мой вариант проходит только два теста, почему?
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
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <iostream>
 
int getDays( int month, int year )
{
  const int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  int result = -1;
 
  if( month < 0 || month > 11 )
    return result;
 
  result = days[ month ];
  if( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ))
    ++result;
 
  return result;
}
 
int main()
{
    unsigned long year1,day1,mounth1,hour1,minute1;
    unsigned long year2,day2,mounth2,hour2,minute2;
    double sum_minute1 = 0,sum_minute2 = 0;
    std::cin >> year1 >> mounth1 >> day1 >> hour1 >> minute1;
    std::cin >> year2 >> mounth2 >> day2 >> hour2 >> minute2;
    sum_minute1 += day1 * 24 * 60;
    sum_minute1 += mounth1 * getDays(mounth1 - 1,year1) * 24 * 60;
    if(year1%4)
        sum_minute1 += year1 * 525600;
    else
        sum_minute1 += year1 * 527040;
    sum_minute1 += minute1 + (hour1*60);
 
    sum_minute2 += day2 * 24 * 60;
    sum_minute2 += mounth2 * getDays(mounth2 - 1,year2) * 24 * 60;
    if(year2%4)
        sum_minute2 += year2 * 525600;
    else
        sum_minute2 += year2 * 527040;
 
    sum_minute2 += minute2 + (hour2*60);
 
    long int minute = sum_minute2 - sum_minute1;
    int count = 0;
    while(minute >= 15){
        count++;
        minute -= 15;
    }
    std::cout << count << std::endl;
    return 0;
}
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
10.01.2014, 15:28
Количество дней, минут можно легко получить используя Boost.Date_Time:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/lexical_cast.hpp>
 
namespace gr = boost::gregorian;
namespace dt = boost::date_time;
 
int main()
{
   gr::date_period period(gr::date(2013, 10, 15), gr::date(dt::day_clock<gr::date>::local_day()));
   int days = boost::lexical_cast<int>(period.length());
   std::cout << "days: " << days << "\n";
   std::cout << "minuts: " << (days * 24 * 60) << "\n";
 
   return 0;
}
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 15:32  [ТС]
DiffEreD, тот вариант не пройдет, так как нужно чтобы эта задача прошла на eolimp.
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
10.01.2014, 16:14
Insane__, вот что намудрил
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
using namespace std;
 
int main()
{
    unsigned long long year1,day1,mounth1,hour1,minute1;
    unsigned long long year2,day2,mounth2,hour2,minute2;
    cin >> year1 >> mounth1 >> day1 >> hour1 >> minute1;
    cin >> year2 >> mounth2 >> day2 >> hour2 >> minute2;
    int count = 0;
    if (year2 > year1)
    {
        count = (year2 - year1)*35712;
        year1 = year2;
    }
    if (mounth2 > mounth1)
    {
        count+=(mounth2 - mounth1)*2976;
        mounth1 = mounth2;
    }
    if (day2 > day1)
    {
        count+=(day2 - day1)*96;
        day1 = day2;
    }
    if (minute1!=0)
        while (minute1!=15 && minute1!=30 && minute1!=45 && minute1!=60)
            ++minute1;
    while (year1!=year2 || mounth1!=mounth2 || hour1!=hour2 || minute1+15<=minute2)
    {
            ++count;
            if (minute1==60)
            {
                ++hour1;
                minute1 = 0;
                if (hour1==24)
                {
                    hour1==0;
                    ++day1;
                    if (day1==32)
                    {
                        day1 = 1;
                        ++mounth1;
                        if (mounth1==13)
                        {
                            ++year1;
                            mounth1 = 1;
                        }
                    }
                }
            }
            minute1+=15;
    }
    cout <<count <<endl;
    return 0;
}
1
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
10.01.2014, 16:41
Зачем столько вычислений? есть стандартная функция difftime()
http://www.cplusplus.com/refer... w=difftime
Возвращает время в секундах между двумя датами. Потом просто возьмите остаток от деления на 15.

Не по теме:

Программу не выкладываю, потому что дико глючит терминал и IDE, невозможно что-либо запустить. Я в бешенстве :ireful::ireful::ireful:

1
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 17:32  [ТС]
gromo, вот пробую сделать через difftime, но программа почему-то выводит 0 независимо от того какие числа я введу.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <iostream>
#include <time.h>
 
//int getDays( int month, int year )
//{
//  const int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//  int result = -1;
 
//  if( month < 0 || month > 11 )
//    return result;
 
//  result = days[ month ];
//  if( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ))
//    ++result;
 
//  return result;
//}
 
int main()
{
    unsigned long year1,day1,month1,hour1,minute1;
    unsigned long year2,day2,month2,hour2,minute2;
    double sum_minute1 = 0,sum_minute2 = 0;
    std::cin >> year1 >> month1 >> day1 >> hour1 >> minute1;
    std::cin >> year2 >> month2 >> day2 >> hour2 >> minute2;
 
    time_t now =23;
    struct tm date1;
    struct tm date2;
    double seconds;
    date1.tm_hour = hour1;
    date1.tm_mon = month1;
    date1.tm_year = year1;
    date1.tm_min = minute1;
    date1.tm_mday = day1;
 
    date2.tm_hour = hour2;
    date2.tm_mon = month2;
    date2.tm_year = year2;
    date2.tm_min = minute2;
    date2.tm_mday = day2;
    std::cout << difftime(mktime(&date2),mktime(&date1));
//    sum_minute1 += day1 * 24 * 60;
//    sum_minute1 += mounth1 * getDays(mounth1 - 1,year1) * 24 * 60;
//    if(year1%4)
//        sum_minute1 += year1 * 525600;
//    else
//        sum_minute1 += year1 * 527040;
//    sum_minute1 += minute1 + (hour1*60);
 
//    sum_minute2 += day2 * 24 * 60;
//    sum_minute2 += mounth2 * getDays(mounth2 - 1,year2) * 24 * 60;
//    if(year2%4)
//        sum_minute2 += year2 * 525600;
//    else
//        sum_minute2 += year2 * 527040;
 
//    sum_minute2 += minute2 + (hour2*60);
 
//    long int minute = sum_minute2 - sum_minute1;
//    int count = 0;
//    while(minute >= 15){
//        count++;
//        minute -= 15;
//    }
//    std::cout << count << std::endl;
    return 0;
}
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
10.01.2014, 19:10
Insane__, что-то типа этого
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    // Здесь всё понятно, я думаю ;D
    unsigned long year1,day1,mounth1,hour1,minute1;
    unsigned long year2,day2,mounth2,hour2,minute2;
    scanf("%lu %lu %lu %lu %lu", &year1,&day1,&mounth1,&hour1,&minute1);
    scanf("%lu %lu %lu %lu %lu", &year2,&day2,&mounth2,&hour2,&minute2);
 
    // Задаем начальное время для функции difftime()
    struct tm begin;
    begin.tm_year = year1 - 1900;  // Года в структуре задаются since 1900
    begin.tm_mday = day1;
    begin.tm_mon  = mounth1 - 1;   // Количество месяцев SINCE january
    begin.tm_hour = hour1;
    begin.tm_min  = minute1;
    begin.tm_sec  = 0;            // секунды не берем во внимание, но они нужны для mktime()
 
    // Задаем конечное время для функции difftime()
    struct tm end;
    end.tm_year = year2 - 1900;
    end.tm_mday = day2;
    end.tm_mon  = mounth2 - 1;
    end.tm_hour = hour2;
    end.tm_min  = minute2;
    end.tm_sec  = 0;
    double diff = difftime(mktime(&end), mktime(&begin));
 
    // Сколько раз ударят часы за этот промежуток?
    div_t divresult = div((int)(diff/60.0), 15);
 
    printf("%d\n", divresult.quot);
    return 0;
}
Добавлено через 9 минут
Как видишь, можно посчитать буквально одной строкой.
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 19:17  [ТС]
Цитата Сообщение от gromo Посмотреть сообщение
Как видишь, можно посчитать буквально одной строкой.
Посчитать можно, но какой будет результат? Программа проходит только два теста, у всех остальных неправильный ответ.
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
10.01.2014, 19:28
Цитата Сообщение от Insane__ Посмотреть сообщение
Посчитать можно, но какой будет результат? Программа проходит только два теста, у всех остальных неправильный ответ.
Какие там тесты ? скинь сюда
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 19:31  [ТС]
В том и прикол, тесты хз какие, просто выводить вот такое:

Результат по тестам:
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. Неверный ответ
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
10.01.2014, 19:40
Цитата Сообщение от Insane__ Посмотреть сообщение
В том и прикол, тесты хз какие, просто выводить вот такое:
Не знаю, что они там хотят, но программа учитывает и високосные года (например между 28 февраля и 1 марта 2016 года пройдет двое суток - результат 192 удара).
Может там проблема во вводе данных? Хз какими кусками оно там на их "тестере" считывает.

Не по теме:

P.s. Лично я никогда не понимал "спортивного" программирования, стремное оно какое-то...

0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 20:02  [ТС]
Цитата Сообщение от gromo Посмотреть сообщение
Может там проблема во вводе данных?
Уже по разному пробовал вводить, пробовал менять тип результата, ничего не помогло! Буду дальше думать
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
10.01.2014, 20:17
Попробуй так.
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
    // Здесь всё понятно, я думаю ;D
    unsigned long year1,day1,mounth1,hour1,minute1;
    unsigned long year2,day2,mounth2,hour2,minute2;
    scanf("%lu %lu %lu %lu %lu", &year1,&mounth1,&day1,&hour1,&minute1);
    scanf("%lu %lu %lu %lu %lu", &year2,&mounth2,&day2,&hour2,&minute2);
 
    // Задаем начальное время для функции difftime()
    struct tm begin;
    begin.tm_year = year1 - 1900;  // Года в структуре задаются since 1900
    begin.tm_mday = day1;
    begin.tm_mon  = mounth1 - 1;   // Количество месяцев SINCE january
    begin.tm_hour = hour1;
    begin.tm_min  = minute1;
    begin.tm_sec  = 0;            // секунды не берем во внимание, но они нужны для mktime()
 
    // Задаем конечное время для функции difftime()
    struct tm end;
    end.tm_year = year2 - 1900;
    end.tm_mday = day2;
    end.tm_mon  = mounth2 - 1;
    end.tm_hour = hour2;
    end.tm_min  = minute2;
    end.tm_sec  = 0;
    double diff = difftime(mktime(&end), mktime(&begin));
 
    // Сколько раз ударят часы за этот промежуток?
    div_t divresult = div((int)(diff/60.0), 15);
 
    printf("%d\n", divresult.quot);
    return 0;
}
0
43 / 43 / 15
Регистрация: 10.09.2013
Сообщений: 293
10.01.2014, 20:27  [ТС]
Все равно то же.
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
10.01.2014, 20:43
Цитата Сообщение от Insane__ Посмотреть сообщение
Все равно то же.
В первом варианте из-за моей невнимательности в переменную дня считывались месяцы и наоборот. Теперь поменял местами и все равно так же? Ясненько...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2014, 20:43
Помогаю со студенческими работами здесь

Постройте блок-схему к задаче. Задача: Перевести часы и минуты в минуты и секунды
Постройте блок-схему к задаче. Задача: Перевести часы и минуты в минуты и секунды

Компьютер играется кадрами каждые 2 минуты на 40 секунд он подвисает, потом опять 2 минуты нормально
Помогите мне, пожалуйста. Проблема почти такая же, но компьютер играется кадрами каждую минуту на 10-15 секунд по 3-4 кадра в секунду,...

Перевести минуты в месяцы, дни, часы, минуты
Есть запрос с группировкой по полю СуммаМинут. Минуты нужно перевести в месяцы, дни, часы, минуты. Как это сделать? Спаситбо.

где можно преобразовать дату(строку), которая приходит из input, в дату(число), чтобы дату задать в setFullYear
const FirstPage = (props) =&gt; { const = useState(''); const = useState(''); const = useState(''); const...

Даны целые числа m (часы) и n (минуты) .Определить наименьшее время (в минутах) когда совпадут минуты и часы
Даны целые числа m (часы) и n (минуты) .Определить наименьшее время (в минутах) до того момента когда часовая и минутная стелка...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru