私はArduinoスクリプト(C/C++)を書いています。スクリプトの重要な機能の1つは、APIから日付を読み取り、その日時までの秒数を計算することです。CでのNSDatesの秒数を計算する
典型的な値は2016-04-10T02:36:00 + 02:00です。これはNSDateのようです。私はObjective-Cで必要なものを達成するための多くのソリューションを見つけましたが、C/C++では実現しませんでした。
ご協力いただければ幸いです。
私はArduinoスクリプト(C/C++)を書いています。スクリプトの重要な機能の1つは、APIから日付を読み取り、その日時までの秒数を計算することです。CでのNSDatesの秒数を計算する
典型的な値は2016-04-10T02:36:00 + 02:00です。これはNSDateのようです。私はObjective-Cで必要なものを達成するための多くのソリューションを見つけましたが、C/C++では実現しませんでした。
ご協力いただければ幸いです。
Cでの秒単位の差分を計算するには、difftime()
を使用すると、秒単位の差が返されます。
double difftime(time_t time1, time_t time0);
必要に応じて、現在の時刻を取得するには、time()
を使用します。現在のカレンダー時間を決定します。 time_t
に "00:36:00 + 02 2016-04-10T02"
time_t time(time_t *timer);
だから、すべての残っているような文字列を取る方法です。
文字列を数字部分に変換します。
if (8 == sscanf(buf, "%d-%d-%dT%d:%d:%d%d:%d", &y, &m, ..., &tzh, &tzm)) Success();
time_t
に(世界時)でy,m,d ...
struct tm tm = {0}; // Important to first zero fill
tm.tm_year = y - 1900;
tm.tm_mon = m - 1;
tm.tm_mday = d;
...
tm.tm_hour = H + tzh;
tm.tm_min = M + tzm*sign(tzh);
tm.tm_sec = S;
struct tm
に変換struct tm
に変換します。このステップは、Cがそれを行うための明確な標準的方法を提供しないため、難しいです。 Thisこれは妥当な移植可能な方法です。代わりの方法については、残りの記事を参照してください。お知らせ何も仮定がなされていない(または必要に応じて)time_t
いる秒程度1970年以降もstruct tm
のみ9のフィールドを持っているということです。
個々の時間コンポーネント(年/月/日/時/分/秒/タイムゾーン)からエポックタイムを計算する式は、ほとんどの高校レベルのコンピュータプログラミングコースの宿題です。それは複雑ではありません。悲しいことに、このホイールは再発明され続けていますが、私はそれを提供する共通のライブラリを自前ではわかりませんが、ローカルシステムのタイムゾーンに/から変換する必要がない限り、 POSIX APIは単にこれを吸ってしまいます。あなたのベルトを一気に締めて、それを自分で計算してください。それは厳しくない。 –
"C/C++"のようなものはありません。実際にあなたはどの言語を使用していますか? –
@LightnessRacesinOrbit Arduinoは独自のプログラミング言語であり、私が理解しているところでは、内部でCとC++の両方を使用できます。 – poff