エポック秒(NTPエポック1900-01-01 00:00以降)からdatetime文字列(MM/DD/YY)に変換する最善の方法を理解しようとしています。 、hh:mm:ss)にはライブラリ/モジュール/外部関数はありません。制限付き組み込みデバイスでのエポック秒から日付変換
私の最初の考えはPython datetime module source codeを見ることでしたが、それは私にはあまり役に立ちませんでした。
私の最初の試みでは、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を実行TelitのGC-864セルラーモデムである1.5.2+のみオペレータ(大部分だけC演算子)、無モジュール、および予想の一部を制限しています組み込みのPython型。あなたが興味を持っているのなら、正確な能力はhereです。あたかも私がCコードを書いているかのように、私はこのデバイス用にPythonを書いています。
- 私はNTPがタイムオフセットのためだけに使用されるのが最も良いと認識していますが、オプションが限られているため、絶対時間ソースとしてNTPを使用しています(さらに、N36ロールオーバーをチェックして、 。
- 最新のファームウェアを搭載したGC-864-V2デバイスにはNTP機能がありますが、使用する必要のあるGC-864は、以前のファームウェアでスタックされています。元々提案
1582年以前の日付を扱うのはどうですか? –
元のコードに含まれていましたが、getDateFromJulianDay関数のC++ソースを含めていませんでした。[ここでは132行目です](http://qt.gitorious.org/qt/qt/blobs/4.7/src/ corelib/tools/qdatetime.cpp#line132)。 – swolpert
それから、あなたの投稿されたコードから削除し、あなたの質問を明確にしてください。 – dkamins