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

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

Войти
Регистрация
Восстановить пароль
 
school_bot
14 / 12 / 3
Регистрация: 23.12.2013
Сообщений: 84
#1

UnixPosix, не ври мне! (неправильный подсчет времени вручную) - C++

03.01.2014, 18:15. Просмотров 298. Ответов 2
Метки нет (Все метки)

Проблема следующая - реализовал я нуля перевод из posix в человечную дату. А тут проблема появилась:
ввожу 54588753952 в свою программу, а также сюда http://www.cy-pr.com/tools/time/, всё совпадает, не считая разницы в почти 2 недели! В 20 веке, в 19 всё ок. Но уже при вводе 6338155552 разница получается один день!
Моя прога:
Введите время в Unix формате
6338155552
Конвертируем:
5.11.2170 6:45:52
На вышеупомянутом сайте:
Tue, 06 Nov 2170 06:45:52 GMT
В ЧЕМ ЖЕ ПРОБЛЕМА? чего я не знаю о современном времяисчислении?
Вот код:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <conio.h>
#include <clocale>
 
int main(void)
{
    setlocale(LC_ALL, "rus");
 
    printf("Введите время в Unix формате\n");
    long long int posix;
    scanf("%lld", &posix);
    printf("Конвертируем: \n"); 
    int day = 1, month = 1, year = 1970, hour = 0, min = 0, sec = 0;
    int yearTime = 31536000;
    while (posix >= yearTime) 
    {
        if (!(year % 4)) 
        {
            yearTime = 31622400;
            if (posix < yearTime) 
            {
                break;
            }
        }
        posix -= yearTime;
        year++;
        yearTime = 31536000;
    }
    int febDays = 28;
    if (!(year % 4)) {
        febDays++;
    }
    int days = 1;
    while (posix >= 86400) 
    {
        posix -= 86400;
        days++;
    }
    if (days <= 31) {
        month = 1;
        day = days;
    } else if (days <= 31 + febDays) {
        month = 2;
        day = days - 31;
    } else if (days <= 62 + febDays) {
        month = 3;
        day = days - 31 - febDays;
    } else if (days <= 92 + febDays) {
        month = 4;
        day = days - 62 - febDays;
    } else if (days <= 123 + febDays) {
        month = 5;
        day = days - 92 - febDays;
    } else if (days <= 153 + febDays) {
        month = 6;
        day = days - 123 - febDays;
    } else if (days <= 184 + febDays) {
        month = 7;
        day = days - 153 - febDays;
    } else if (days <= 215 + febDays) {
        month = 8;
        day = days - 184 - febDays;
    } else if (days <= 245 + febDays) {
        month = 9;
        day = days - 215 - febDays;
    } else if (days <= 276 + febDays) {
        month = 10;
        day = days - 245 - febDays;
    } else if (days <= 306 + febDays) {
        month = 11;
        day = days - 276 - febDays;
    } else {
        month = 12;
        day = days - 306 - febDays;
    }
    while (posix >= 3600) 
    {
        posix -= 3600;
        hour++;
    }
    while (posix >= 60) 
    {
        posix -= 60;
        min++;
    }
    sec = posix;
    printf("%d.%d.%d %d:%d:%d\n", day, month, year, hour, min, sec);
 
    printf("\n\n... Нажмите любую клавишу для выхода");
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 18:15     UnixPosix, не ври мне! (неправильный подсчет времени вручную)
Посмотрите здесь:

C++ Подсчет времени выполнения сортировки
Подсчет количества минут от промежутка до промежутка без учета еще одного промежутка времени. C++
C++ точность, настраиваемая вручную
C++ Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
C++ Реализовать подсчет числа пи по представленной формуле с измерением времени работы в секундах
Подсчет времени работы программы C++
Гиперболический Синус в ряд - неправильный подсчет C++
Подсчет времени выполнения функции C++
Быстрая сортировка, неправильный подсчет количества сравнений и перестановок C++
C++ Подсчет времени через QueryPerformanceCounter
C++ Неправильный подсчет количества треугольников
C++ Подсчет времени работы программы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
03.01.2014, 19:36     UnixPosix, не ври мне! (неправильный подсчет времени вручную) #2
Цитата Сообщение от school_bot Посмотреть сообщение
чего я не знаю о современном времяисчислении?
судя по всему вот чего (из википедии):
год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо он кратен 100, но при этом не кратен 400.
т.е. 1600, 2000, 2400 года являются високосными, а 2100, 2200, 2300 не являются високосными.
school_bot
14 / 12 / 3
Регистрация: 23.12.2013
Сообщений: 84
03.01.2014, 19:43  [ТС]     UnixPosix, не ври мне! (неправильный подсчет времени вручную) #3
спасибо, тема закрыта. if (!(year % 4) && ((year % 100) || !(year % 400)))
Yandex
Объявления
03.01.2014, 19:43     UnixPosix, не ври мне! (неправильный подсчет времени вручную)
Ответ Создать тему
Опции темы

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