2016-04-10 1 views
0

私はArduinoスクリプト(C/C++)を書いています。スクリプトの重要な機能の1つは、APIから日付を読み取り、その日時までの秒数を計算することです。CでのNSDatesの秒数を計算する

典型的な値は2016-04-10T02:36:00 + 02:00です。これはNSDateのようです。私はObjective-Cで必要なものを達成するための多くのソリューションを見つけましたが、C/C++では実現しませんでした。

ご協力いただければ幸いです。

+0

個々の時間コンポーネント(年/月/日/時/分/秒/タイムゾーン)からエポックタイムを計算する式は、ほとんどの高校レベルのコンピュータプログラミングコースの宿題です。それは複雑ではありません。悲しいことに、このホイールは再発明され続けていますが、私はそれを提供する共通のライブラリを自前ではわかりませんが、ローカルシステムのタイムゾーンに/から変換する必要がない限り、 POSIX APIは単にこれを吸ってしまいます。あなたのベルトを一気に締めて、それを自分で計算してください。それは厳しくない。 –

+0

"C/C++"のようなものはありません。実際にあなたはどの言語を使用していますか? –

+0

@LightnessRacesinOrbit Arduinoは独自のプログラミング言語であり、私が理解しているところでは、内部でCとC++の両方を使用できます。 – poff

答えて

0

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); 

だから、すべての残っているような文字列を取る方法です。

  1. 文字列を数字部分に変換します。

    if (8 == sscanf(buf, "%d-%d-%dT%d:%d:%d%d:%d", &y, &m, ..., &tzh, &tzm)) Success(); 
    
  2. 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; 
    
  3. struct tmに変換struct tmに変換します。このステップは、Cがそれを行うための明確な標準的方法を提供しないため、難しいです。 Thisこれは妥当な移植可能な方法です。代わりの方法については、残りの記事を参照してください。

お知らせ何も仮定がなされていない(または必要に応じて)time_tいる秒程度1970年以降もstruct tmのみ9のフィールドを持っているということです。

関連する問題