Как бы вы получили время эпохи и преобразовали его в местное время в сборке руки на Raspberry Pi?

Итак, я программирую сборку рук на raspbian и пытаюсь преобразовать время эпохи с помощью библиотек c/c++, потому что это то, что мне разрешено делать, но я не понимаю, как это сделать. Если я просто bl time, это даст мне время эпохи, но я не понимаю, как получить возвращаемое значение в r0, а затем преобразовать его в локальное время в сборке с использованием библиотек C или C++. Я знаю, что существуют localtime/gmtime и strftime, но это не так просто, как получить эпоху и просто bl localtime или bl strftime. Затем я хочу отформатировать его так, чтобы я получал только местное время и, возможно, am/pm. Дата меня не интересует. Мне просто нужен какой-нибудь полезный код или какое-то направление, в котором нужно двигаться. Спасибо

Изменить: если проще просто преобразовать с помощью математики, это также было бы полезно


person Zboyz    schedule 12.12.2019    source источник
comment
ну, вам нужно знать, когда эпоха обычно и единицы возвращаемого значения. это в секундах с начала эпохи? если все, что вам нужно, это время, а не дата, тогда получите остаток от деления количества единиц тиков в день. если секунды, то разделить на количество секунд в день, если эпоха начинается в полночь, то результатом будет количество тиков, давайте предположим секунды в этот день, если это меньше 12 часов стоит секунд, это am, если больше 12 часов стоит это pm. Это не язык и не библиотека, просто математика.   -  person old_timer    schedule 12.12.2019
comment
Если вам нужна дата, то это НАМНОГО веселее, вам нужно иметь дело с тиками в год, високосными годами, месяцами, не имеющими одинакового количества дней и т. д., можно посмотреть на реализации функций времени с открытым исходным кодом для ярлыков или просто сделать это грубая сила.   -  person old_timer    schedule 12.12.2019
comment
а для местного времени добавьте к нему часовые пояса, часы, скорректированные по Гринвичу для вашего местоположения и времени года.   -  person old_timer    schedule 12.12.2019
comment
Сделайте пару делений и деление по модулю, и вы получите время в формате 24, затем получите am или pm со значением (час/12) и точное время с (час% 12)   -  person PunyCode    schedule 12.12.2019
comment
Хорошо, это в секундах, но я считаю, что оно использует военное время, поэтому все, что мне нужно, это время эпохи / 86400, а все, что осталось от этого, - это количество секунд, которые в настоящее время в дне, что я мог бы точно указать, что час и минута то есть? @Старожил   -  person Zboyz    schedule 12.12.2019
comment
Что именно я буду делить? Если я разделю эпоху на количество секунд в сутках, я получу количество дней, нет? И какое значение будет представлять остаток, кстати, @PunyCode   -  person Zboyz    schedule 12.12.2019
comment
объясните, как он использует военное время, это количество секунд с начала эпохи, это секунды с начала эпохи, нет часов минут, утра / вечера, дней недели. всего секунды. вы превращаете секунды во что угодно, часы, минуты, военные или am/pm, любой часовой пояс и т. д.   -  person old_timer    schedule 12.12.2019
comment
это то, что означает остаток, верно? вам нужно сначала настроить часовой пояс.   -  person old_timer    schedule 12.12.2019
comment
Ах. Итак, если я разделю количество секунд в дне, я получу количество дней, а если я умножу это на 24, я получу количество часов, прошедших с тех пор. Если бы я хотел найти оставшееся количество часов в году, я бы просто взял остаток часов с эпохи и 365? или мне нужно будет преобразовать часы/дни в годы с начала эпохи и взять оставшееся время до 2020 года, что составит 50 лет? @Старожил   -  person Zboyz    schedule 12.12.2019
comment
Годы и месяцы более сложные, у вас есть високосные годы, поэтому вам нужно проработать их, а затем в месяцах не одинаковое количество дней, поэтому вам нужно проработать их.   -  person old_timer    schedule 12.12.2019
comment
а затем есть високосные секунды, интересно, заботится ли о них какая-либо os/library. на данный момент вы хотели, чтобы время утра / вечера сегодня. поэтому вам нужно сначала настроить часовой пояс, затем разделить на 24 часа (значение секунд) и сохранить остаток, остаток - это количество секунд сегодня, затем вы можете превратить это в часы/минуты/секунды. что, если вы боретесь с 24 часа в сутки, то часы/минуты/секунды — это еще больше работы. как вы сохраняете результат и остаток делений.   -  person old_timer    schedule 12.12.2019


Ответы (1)


Чтобы не делать домашнее задание за вас, вот пример. Все это базовая школьная математика, никакой магии.

Если у меня есть 345678 пенни, как это разбивается на различные суммы в долларах и монетах.

В одном долларе 100 пенни, а в 100-долларовой банкноте 100 долларов, поэтому

345678 / (100*100) = 34 остаток 5678

Глядя на единицы

пенни / (пенни/доллар * доллар/сотня) =

(копейки * доллары * сотни) / (копейки * доллары)

пенни и доллары уравновешиваются, остаются сотни, что правильно

Итак, 34 стодолларовых купюры с остатком 5678 пенни.

повторить для 20-долларовых купюр

5678 / (100*20) = 2 остатка 1678

10-долларовые купюры

1678/(100*10) = 1 остаток 678

5-долларовые купюры

678/(100*5) = 1 остаток 178

однодолларовые купюры

178/(100*1) = 1 остаток 78

штук 50 центов

78/50 = 1 остаток 28

четверти (25 центов)

28/25 = 1 остаток 3

десять центов (10 центов) 0 остаток 3

пятаки (5 центов) 0 остаток 3

копейки остаток 3

значит 345678 копеек равно

34 100 dollar bills +
 2  20 dollar bills +
 1  10 dollar bill +
 1  5 dollar bill +
 1  1 dollar bill +
 1  half dollar coin +
 1  quarter +
 3  pennies

проверить работу

34 * 100 * 100 = 340000 
2  * 100 * 20  = 4000
1  * 100 * 10  = 1000
1  * 100 * 5   = 500
1 * 100        = 100
1 * 50         = 50
1 * 25         = 25
1 * 3          = 3
add that up you get 345678

Если бы я просто хотел знать, сколько четвертей

345678/(25*1) = 13827 четвертей с остатком 3.

все работает одинаково с 60 секундами в минуту 60 минутами в час 24 часа в сутки. 365 дней на 1970 год, 365 дней на 1971 год, 366 дней на 1972 год, 365 дней на 1973 год и т.д.

31 день на январь, 28 дней на февраль 2019 года, 31 день на март и так далее

проще настроить для часового пояса первые 60 секунд * 60 минут * часы настройки добавить или вычесть это по мере необходимости, затем обработайте это число либо через годы/месяцы/дни, либо если вам просто нужно время суток, вам нужно только разделить по секундам в сутки. или вы можете разделить на секунды в день и получить общее количество дней в результате с долей дня в качестве остатка, доля дня - это время дня сегодня, а общее количество дней вы можете позже вычесть из лет, а затем месяцев, чтобы найти дату.

Дополнительный кредит, в каком году компьютеры с 32-битными счетчиками времени, использующие эпоху 1970 года, будут иметь событие опрокидывания, подобное Y2K (вызывающее сбои, смерть и разрушения по всей планете, как и Y2K)?

Язык программирования не имеет значения, пока алгоритм не будет понят и идеально закодирован на любимом языке высокого уровня, чтобы подтвердить/доказать алгоритм. Затем перенесите эти знания на какой-нибудь другой язык программирования.

Сокращение шагов иногда приводит вас к цели быстрее, но когда сокращение не работает, оно терпит неудачу впечатляющим образом.

person old_timer    schedule 12.12.2019
comment
Ничего себе, старожил, спасибо, что заставил понять то, что я ЗНАЛ, было настолько очевидным, но, поскольку я не посещал так долго, совершенно забыл. Когда я исправляю это, текущее время эпохи составляет 1576189924% 86400, и, взяв остаток от этого, я получаю 81124 секунды. Если я разделю это на (60 * 60) (60 секунд в минуту x 60 минут в часе), я получу 22 часа и 1924 секунды. Теперь, наконец, если я разделю это на 60 32 минуты. Что по времени по Гринвичу, из которого это 22:32:40 секунд. Спасибо! - person Zboyz; 13.12.2019