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

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

Восстановить пароль Регистрация
 
school_bot
14 / 12 / 3
Регистрация: 23.12.2013
Сообщений: 84
03.01.2014, 18:15     UnixPosix, не ври мне! (неправильный подсчет времени вручную) #1
Проблема следующая - реализовал я нуля перевод из 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++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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, не ври мне! (неправильный подсчет времени вручную)
Ответ Создать тему
Опции темы

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