|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
||||||
Класс по работе с датой22.08.2023, 12:30. Показов 907. Ответов 16
Метки нет (Все метки)
Всем привет!
Разрабатываю класс по работе с датой Нашёл алгоритмы перевода даты как дня, месяца и года в количество дней И обратный алгоритм - из количества дней в день, месяц и год Сделал туда (из 22.08.2023) в количество дней. Получил 739 059 Сделал обратно (из 739 059) в дату. Получил 15.05.2017. А должна была та же дата получиться Как исправить это? Алгоритмы нужны для последующей реализации смещений дат на указанные периоды date.cpp Кликните здесь для просмотра всего текста
0
|
||||||
| 22.08.2023, 12:30 | |
|
Ответы с готовыми решениями:
16
Ексепшен при работе з датой! Ошибка при работе с датой sql/delphi |
|
фрилансер
6450 / 5651 / 1129
Регистрация: 11.10.2019
Сообщений: 15,047
|
||
| 22.08.2023, 12:40 | ||
|
SomniPhobia, приложи компилируемый пример, чтобы была возможность в отладчике протестировать.
1
|
||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
|||
| 22.08.2023, 12:45 [ТС] | |||
|
Алексей1153,
А нравится из Qt: QDate, QTime, QDateTime - очень удобные классы
0
|
|||
|
фрилансер
6450 / 5651 / 1129
Регистрация: 11.10.2019
Сообщений: 15,047
|
|
| 22.08.2023, 12:48 | |
|
SomniPhobia, ну так возьми исходники
QDate, QTime, QDateTime ![]() Если там будет много зависимостей, то оставь только их интерфейс, в внутри сделай на хроно
1
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||||
| 22.08.2023, 17:53 | ||||||||
Сообщение было отмечено SomniPhobia как решение
РешениеDate& Date::assign(int day)Получить дни из даты : int Date::calc_days(const Date & date)Самоклёп. Добавлено через 7 минут По сегодняшней дате, где то косяк. Слишком сыроват. Добавлено через 4 минуты Исправил. В Date::assign(int day) цикле вычета готовых месяцев использовал не тот массив.
Время от времени, отсчет дней менялся. Даже начиная с Н.Э. Что бы понять как считать всё это чудо, нужно прогрызть гранитную пластину с этим вот всем ... Добавлено через 4 часа 33 минуты SomniPhobia, Еще не большая ремарка. Мой класс даты, это по Григорианскому календарю. И почему день недели совпадает, для меня пока вопрос. Видимо в конце 15 века, астрономы решили что можно положить на это(погрешность) болт (болт на это). Что бы дальше считать дни как можно точнее.
1
|
||||||||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
|
| 23.08.2023, 12:56 [ТС] | |
|
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 23.08.2023, 17:57 | ||
|
Мог бы применить бинарный поиск но 12 элементах это как давить блоху салфеткой ? Хотя для меня это странный вопрос, почему мой класс дает правильный день вам не интересно. или вы знаете ответ на этот вопрос ? ))
0
|
||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
|||||
| 24.08.2023, 10:06 [ТС] | |||||
|
SmallEvil, интересно
Добавлено через 3 минуты В методе
0
|
|||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||||||||||||||
| 24.08.2023, 10:22 | |||||||||||||||||||
|
Это нужно учитывать при арифметических операциях. Начнем с подсчета количества високосных годов.
year номер года.Что бы получить количество прошедших годов, придется отнять текущий. int years - уже не номер года, а их количество (полных прошедших лет начиная с 1.1.1).
Как то так, кажется ) Добавлено через 4 минуты По хорошему нужно отнять еще 1 день, что бы получить именно количество прошедших дней. Но у меня это означает какой день по счету. То есть, название могло бы быть Date::calc_day Хотя хрен редьки не слаще. В тестовом примере я эту единицу отнимаю уже вне класса.
1
|
|||||||||||||||||||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
||||||
| 24.08.2023, 10:31 [ТС] | ||||||
|
Для сверки создал метод расчёта количества дней во всех предшествующих годах в лоб
Кликните здесь для просмотра всего текста
Результат
0
|
||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 24.08.2023, 11:27 | |||
|
SomniPhobia, у тебя на год больше.
Ведь 2023 года пройдет только к 2024 ![]() А у меня по прежнему баги в assign-ах ... Добавлено через 51 секунду Нет такого года. Добавлено через 49 минут У меня еще и в месяцах косяк : ![]()
Наверное всё же придётся дописать этот класс до работоспособности.
0
|
|||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
||
| 24.08.2023, 11:34 [ТС] | ||
|
Добавлено через 47 секунд В июле и августе по 31 дню. Эти месяцы стоят рядом. Поэтому 31 и 31
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 24.08.2023, 11:46 | |
|
0
|
|
|
6162 / 2853 / 1042
Регистрация: 01.06.2021
Сообщений: 10,418
|
|||||||
| 24.08.2023, 12:02 | |||||||
Такой код работает для дат после 23 ноября −4713 года (4714 года до н. э.). SomniPhobia, JDN измеряется днями, поэтому вы можете к нему добавить или отнять нужное количество дней, а потом перевести его в обычную дату. Также вы можете вычислить разность JDN двух разных дат и узнать количество дней между ними.
1
|
|||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 24.08.2023, 12:11 | |
|
0
|
|
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,408
|
|
| 25.08.2023, 04:43 [ТС] | |
|
SmallEvil, как сделать чтобы у меня был на протяжении всей работы программы один объект Date со значениями 1 день, 1 меся, 1970 год? Это синглтон нужно делать или как-то по-другому можно?
И как потом хранить на протяжении всей работы программы количество дней от 1 года до 01.01.1970? Как посоветуете сделать?
0
|
|
|
фрилансер
6450 / 5651 / 1129
Регистрация: 11.10.2019
Сообщений: 15,047
|
|
| 25.08.2023, 09:54 | |
|
SomniPhobia, глобальная переменная типа
constexpr Date, инициализированная нужными значениями. Для этого нужен будет constexpr конструкторДобавлено через 1 минуту хотя, можно и просто const. Но я бы сделал constexpr, ничего этому не мешает
1
|
|
| 25.08.2023, 09:54 | |
|
Помогаю со студенческими работами здесь
17
Создать класс для работы с датой Построить класс для работы с датой Создать класс для работы с датой Создать класс для работы с датой. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|