先日、Ambientのbulk_send()で時刻の表現として1970年1月1日00:00:00からの「ミリ秒」に加えて、「秒」で表すことができるようにしました。(データー登録時に「秒」も扱えるようにしました)
例えば2016年7月10日07:43:14を協定世界時(UTC)の1970年1月1日00:00:00からのミリ秒で表すと1,468,104,194,594という数値になります。これは32ビットを超えていて、C/C++だとlong long intで扱うことになります。Arduino/ESP8266でもlong long intはサポートされています。Serial.print(sizeof(long long));を実行すると8が得られるので、64ビットが割り当てられているようです。通常、printfやsprintfでは%lldとか%llxでlong long intを表示してくれますが、残念なことにArduino/ESP8266では%lldが機能していないようです。Arduino Forumでも「」という同様のトピックがありました。
時刻を1970年1月1日00:00:00からの「ミリ秒」でなく「秒」で表せば32ビットで収まり、long intで扱えます。これがAmbientで時刻を秒でも表せるようにした理由です。
「Arduinoで64ビットのsprintfが動かない」問題に対する別の、力づくの解があります。これは「データーはlong longで宣言しておいて、sprintfするときに二つのlongに分ける」というやり方です。
long long t =1468104194594; long uppert, lowert; uppert = t / 1000000L; lowert = t % 1000000L; sprintf(buffer, "%ld%ld", uppert, lowert);
何かの理由で時刻をUNIX系と同様に1970年1月1日00:00:00からの「ミリ秒」で扱う必要がある場合は、こんな方法もあるようです。