История изменений
Исправление slovazap, (текущая версия) :
Просто вопрос соглашения.
Делать printf("Сейчас %s", monthNames[month])
и printf("С начала месяца прошло %d часов", day * 24 + hour)
удобнее когда месяц и числа нумеруются с 0, а не 1 и можно ошибиться в противном случае.
Делать printf("%02d.%02d.%04d", day, month, year)
удобнее когда месяц и числа нумеруются с 1, а не 0 и можно ошибиться в противном случае.
Поэтому обе схемы нумерации имеет право на жизнь, а тебе как разработчику достаточно знать где как принято, этим пользоваться и не сношать мозги ни себе ни людям.
я знаком со многими RTC контроллерами
А кому какое до них дело? Есть POSIX который предписывает что должно быть в struct tm, и его написали исходя из каких-то соображений, в число которых «сделать точно так как в даташите на какой-то там сраный RTC» едва ли входило с ненулевым весом. Тем более что когда он разрабатывался может и тех RTC что вы «знаете» не существовало.
Сами контроллеры тоже проектировали исходя из каких-то соображений, но с другими приоритетами, и мне кажется логичным то что в RTC, основное применение которым испокон веков было показать часики в приборах, где цифровой логики кроме этих часов могло вообще не быть, приоритетом было отдавать время в human readable формате, а POSIX всё-таки писали для разработчиков полноценного ПО, у которых во-первых, с нумерацией с нуля проблем нет и найдётся пара байт кода на ±1, во-вторых, которым намного больнее сделать ошибку забыв ±1 при индексации массива или расчётов со временем, чем при отображении пользователю (что несёт намного менее серьёзные последствия и быстрее обнаруживается). Правда, почему tm_mday начинается не с 0 у меня предположений нет.
А rtc_time, очевидно, делали совместимым с struct tm
независимо от того что там отдаёт RTC.
Исправление slovazap, :
Просто вопрос соглашения.
Делать printf("Сейчас %s", monthNames[month])
и printf("С начала месяца прошло %d часов", day * 24 + hour)
удобнее когда месяц и числа нумеруются с 0, а не 1 и можно ошибиться в противном случае.
Делать printf("%02d.%02d.%04d", day, month, year)
удобнее когда месяц и числа нумеруются с 1, а не 0 и можно ошибиться в противном случае.
Поэтому обе схемы нумерации имеет право на жизнь, а тебе как разработчику достаточно знать где как принято, этим пользоваться и не сношать мозги ни себе ни людям.
я знаком со многими RTC контроллерами
А кому какое до них дело? Есть POSIX который предписывает что должно быть в struct tm, и его написали исходя из каких-то соображений, в число которых «сделать точно так как в даташите на какой-то там сраный RTC» едва ли входило с ненулевым весом. Тем более что когда он разрабатывался может и тех RTC что вы «знаете» не существовало.
Сами контроллеры тоже проектировали исходя из каких-то соображений, но с другими приоритетами, и мне кажется логичным то что в RTC, основное применение которым испокон веков было показать часики в приборах, где цифровой логики кроме этих часов могло вообще не быть, приоритетом было отдавать время в human readable формате, а POSIX всё-таки писали для разработчиков полноценного ПО, у которых во-первых, с нумерацией с нуля проблем нет и найдётся пара байт кода на ±1, во-вторых, которым намного больнее сделать ошибку забыв ±1 при индексации массива или расчётов со временем, чем при отображении пользователю (что несёт намного менее серьёзные последствия и быстрее обнаруживается).
А rtc_time, очевидно, делали совместимым с struct tm
независимо от того что там отдаёт RTC. Вот почему tm_mday начинается не с 0 у меня предположений нет.
Исправление slovazap, :
Просто вопрос соглашения.
Делать printf("Сейчас %s", monthNames[month])
и printf("С начала месяца прошло %d часов", day * 24 + hour)
удобнее когда месяц и числа нумеруются с 0, а не 1 и можно ошибиться в противном случае.
Делать printf("%02d.%02d.%04d", day, month, year)
удобнее когда месяц и числа нумеруются с 1, а не 0 и можно ошибиться в противном случае.
Поэтому любая схема нумерации имеет право на жизнь, а тебе как разработчику достаточно знать где как принято, этим пользоваться и не сношать мозги ни себе ни людям.
я знаком со многими RTC контроллерами
А кому какое до них дело? Есть POSIX который предписывает что должно быть в struct tm, и его написали исходя из каких-то соображений, в число которых «сделать точно так как в даташите на какой-то там сраный RTC» едва ли входило с ненулевым весом. Тем более что когда он разрабатывался может и тех RTC что вы «знаете» не существовало.
Сами контроллеры тоже проектировали исходя из каких-то соображений, но с другими приоритетами, и мне кажется логичным то что в RTC, основное применение которым испокон веков было показать часики в приборах, где цифровой логики кроме этих часов могло вообще не быть, приоритетом было отдавать время в human readable формате, а POSIX всё-таки писали для разработчиков полноценного ПО, у которых во-первых, с нумерацией с нуля проблем нет и найдётся пара байт кода на ±1, во-вторых, которым намного больнее сделать ошибку забыв ±1 при индексации массива или расчётов со временем, чем при отображении пользователю (что несёт намного менее серьёзные последствия и быстрее обнаруживается).
А rtc_time, очевидно, делали совместимым с struct tm
независимо от того что там отдаёт RTC. Вот почему tm_mday начинается не с 0 у меня предположений нет.
Исправление slovazap, :
Просто вопрос соглашения.
Делать printf("Сейчас %s", monthNames[month])
и printf("С начала месяца прошло %d часов", day * 24 + hour)
удобнее когда месяц и числа нумеруются с 0, а не 1 и можно ошибиться в противном случае.
Делать printf("%02d.%02d.%04d", day, month, year)
удобнее когда месяц и числа нумеруются с 1, а не 0 и можно ошибиться в противном случае.
Поэтому любая схема нумерации имеет право на жизнь, а тебе как разработчику достаточно знать где как принято, этим пользоваться и не сношать мозги ни себе ни людям.
я знаком со многими RTC контроллерами
А кому какое до них дело? Есть POSIX который предписывает что должно быть в struct tm, и его написали исходя из каких-то соображений, в число которых «сделать точно так как в даташите на какой-то там сраный RTC» едва ли входило с ненулевым весом. Тем более что когда он разрабатывался может и тех RTC что вы «знаете» не существовало.
Сами контроллеры тоже проектировали исходя из каких-то соображений, но с другими приоритетами, и мне кажется логичным то что в RTC, основное применение которым испокон веков было показать часики в приборах, где цифровой логики кроме этих часов могло вообще не быть, приоритетом было отдавать время в human readable формате, а POSIX всё-таки писали для разработчиков полноценного ПО, у которых во-первых, с нумерацией с нуля проблем нет и найдётся пара байт кода на ±1, во-вторых, которым намного больнее сделать ошибку забыв ±1 при индексации массива или расчётов со временем, чем при отображении пользователю (что несёт намного менее серьёзные последствия и быстрее обнаруживается).
А rtc_time, очевидно, делали совместимым с struct tm
независимо от того что там отдаёт RTC.
Исходная версия slovazap, :
Просто вопрос соглашения.
Делать printf("Сейчас %s", monthNames[month])
и printf("С начала месяца прошло %d часов", day * 24 + hour)
удобнее когда месяц и числа нумеруются с 0, а не 1 и можно ошибиться в противном случае.
Делать printf("%02d.%02d.%04d", day, month, year)
удобнее когда месяц и числа нумеруются с 1, а не 0 и можно ошибиться в противном случае.
Можно делать и так и так, тебе как разработчику достаточно знать где как принято, этим пользоваться и не сношать мозги ни себе ни людям.
я знаком со многими RTC контроллерами
А кому какое до них дело? Есть POSIX который предписывает что должно быть в struct tm, и его написали исходя из каких-то соображений, в число которых «сделать точно так как в даташите на какой-то там сраный RTC» едва ли входило с ненулевым весом. Тем более что когда он разрабатывался может и тех RTC что вы «знаете» не существовало.
Сами контроллеры тоже проектировали исходя из каких-то соображений, но с другими приоритетами, и мне кажется логичным то что в RTC, основное применение которым испокон веков было показать часики в приборах, где цифровой логики кроме этих часов могло вообще не быть, приоритетом было отдавать время в human readable формате, а POSIX всё-таки писали для разработчиков полноценного ПО, у которых во-первых, с нумерацией с нуля проблем нет и найдётся пара байт кода на ±1, во-вторых, которым намного больнее сделать ошибку забыв ±1 при индексации массива или расчётов со временем, чем при отображении пользователю (что несёт намного менее серьёзные последствия и быстрее обнаруживается).
А rtc_time, очевидно, делали совместимым с struct tm
независимо от того что там отдаёт RTC.