我想知道从纪元时间(自NTP时代1900-01-01 00:00)转换为日期时间字符串(MM/DD/YY ,hh:mm:ss)没有任何库/模块/外部函数,因为它们在嵌入式设备上不可用。Epoch在有限嵌入式设备上进行秒转换
我的第一个想法是看Python datetime module source code,但是这对我来说并不是很有用。
我在Python中的初始尝试使用自0001-01-01以来的天数转换,使用getDateFromJulianDay
适应Python的C++ source,并结合模运算获取时间。它有效,但有没有更好的方法?
def getDateFromJulianDay(julianDay):
# Gregorian calendar starting from October 15, 1582
# This algorithm is from:
# Henry F. Fliegel and Thomas C. van Flandern. 1968.
# Letters to the editor:
# a machine algorithm for processing calendar dates.
# Commun. ACM 11, 10 (October 1968), 657-. DOI=10.1145/364096.364097
# http://doi.acm.org/10.1145/364096.364097
ell = julianDay + 68569;
n = (4 * ell)/146097;
ell = ell - (146097 * n + 3)/4;
i = (4000 * (ell + 1))/1461001;
ell = ell - (1461 * i)/4 + 31;
j = (80 * ell)/2447;
d = ell - (2447 * j)/80;
ell = j/11;
m = j + 2 - (12 * ell);
y = 100 * (n - 49) + i + ell;
return y,m,d
# NTP response (integer portion) for Monday, March 25, 2013 at 6:40:43 PM
sec_since_1900 = 3573225643
# 2415021 is the number of days between 0001-01-01 and 1900-01-01,
# the start of the NTP epoch
(year,month,day) = getDateFromJulianDay(2415021 + sec_since_1900/60/60/24)
seconds_into_day = sec_since_1900 % 86400
(hour, sec_past_hour) = divmod(seconds_into_day,3600)
(min, sec) = divmod(sec_past_hour,60)
print 'year:',year,'month:',month,'day:',day
print 'hour:',hour,'min:',min,'sec:',sec
为什么我这样做: 我正在从NTP服务器的当前时间,并采取这次在面值更新硬件实时时钟(RTC)只接受之日起,时间和时区:MM/DD/YY,hh:mm:ss,±zz。我计划在以后实施真正的NTP功能。时间同步方法的讨论最好留在其他地方,如this question。
注:
- 我的嵌入式设备是运行的Python 1.5.2+并且只有泰利特GC-864蜂窝式调制解调器具有有限的运营商(大多只是C运算符),没有模块,和一些预期的内置的Python类型。如果您有兴趣,确切的功能是here。我为这个设备编写Python,好像我正在编写C代码 - 我知道不是Pythonic。
- 我意识到NTP最好只用于时间偏移,但是有限的选择,我使用NTP作为绝对时间源(我可以在2036年添加NTP翻转检查以启用另一个136年的操作) 。
- 具有最新固件的GC-864-V2设备具有NTP功能,但我需要使用的GC-864卡住了以前的固件版本。
你为什么在1582年之前打扰日期呢? – 2013-03-26 00:48:49
是的,没有必要 - 被包含在原始代码中,忘记包含getDateFromJulianDay函数的C++源代码,[line 132 here](http://qt.gitorious.org/qt/qt/blobs/4.7/src/ corelib的/工具/ qdatetime.cpp#line132)。 – swolpert 2013-03-26 00:59:02
然后将其从您的发布代码中删除,并让您的问题更清晰。 – dkamins 2013-03-26 21:38:21