LINUX.ORG.RU

История изменений

Исправление 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.