[[:start|На главную]], [[:notes:notes|Заметки]] ---- ====== Перевод времени в формате Unix в привычную дату-время ====== {{tag>Заметки Unix Timestamp}} ===== Алгоритм ===== (найдено на зарубежном ресурсе) >Ok, I managed to get something accurate. Dang leap years! > >In the steps below I am using a timestamp of 1203161493 which corresponds to a date/time of 2-15-2008 11:31:33. I'm ignoring timezones and whatnot, it isn't necessary for this. > >Steps: >1. Unix timestamp / hours in a year to get years from 1970 to timestamp >>ex: 1203161493 / 31436000 = 38.152... years since 1970. Ignoring the decimals, thats 38 years + 1970 = 2008. > >2. Determine number of leap years from 1970 to year found in step 1 (extra days). >ex: (2008-1969)/4 = 9.75. Again, ignore the decimal, and we have 9 extra days (we ignore this year's leap day until later) > >3. Determine the number of days since the epoch. >ex: 1203161493 / 86400 = 13925.480... days since epoch. Ignore the decimals again. > >4. Subtract leap days from number of days since epoch. >ex: 13925 - 9 = 13916. > >5. Modulo the number above by the number of days in a year to find the days passed in the current year. >ex: 13916 % 365 = 46 days this year. > >6. We go through each month and subtract it until the days left are less than the month's total days. If this year is a leap year and your days in this year found in step 5 was greater than 59 (31+28), we would add one. >ex: 46 - 31 days in Jan = 15 days (in 2nd month) = Feb 15. > >6. Find the number of seconds in the current day. Subtract the days since epoch found in step 3 from the timestamp. >ex: 1203161493 - (13925 * 86400) = 41493 seconds > >7. Figure out how many hours the seconds found in step 6 is. >ex: 41493 / 3600 = 11.5283... hours. Ignore the decimal again. > >8. Find the number of minutes left. Subtract the hours you found in the previous step from the seconds in step 6, then divide by 60. >ex: 41493 - (11 * 3600) = 1893 >1893 / 60 = 31.55 minutes. Ignore the decimal > >9. Find the number of seconds left. Subtract the minutes in step 8 from the seconds in step 8 >ex: 1893 - (31 * 60) = 33 seconds. > >Put it all together: >Year: 2008 >Month: 2 >Day: 15 >Hour: 11 >Minute: 31 >Second: 33 ---- ===== Дополнительно ===== ==== Полезные ссылки на эту тему ==== * [[http://we.easyelectronics.ru/Soft/konvertaciya-vremeni.html|Конвертация времени]] * [[http://we.easyelectronics.ru/Soft/funkcii-kalendarya-i-vremeni-na-odnom-registre.html|Функции календаря и времени на одном регистре]] * [[https://ru.wikipedia.org/wiki/%D0%AE%D0%BB%D0%B8%D0%B0%D0%BD%D1%81%D0%BA%D0%B0%D1%8F_%D0%B4%D0%B0%D1%82%D0%B0|Читаем про преобразование дат]] ---- [[:start|На главную]], [[:notes:notes|Заметки]] ~~DISCUSSION~~