Raspberry Pi[52]「GPS時刻 msec」から年時分への変換

使用するGPSによっては、GPSの時刻がPS時刻の基準点、つまり「GPS時刻のゼロ(0)」は、1980年1月6日 00:00:00 UTC に設定されています。この日をGPS時刻の起点として、現在までの時間が連続してカウントした値を出しているものがあります。この場合は、年時分秒に変換したくなるかもしれません。そんな時は、下記のコードで変換できます。

#include <stdio.h>
#include <time.h>

void gps_to_jst_time(time_t gps_seconds, struct tm *jst_time) {
    // GPS時刻の基準日(1980年1月6日 00:00:00 UTC)
    const time_t GPS_EPOCH = 315964800;

    // GPS時刻をUTCに変換
    time_t utc_seconds = GPS_EPOCH + gps_seconds;

    // UTCをJSTに変換(UTC + 9時間 = 32400秒)
    time_t jst_seconds = utc_seconds + 32400;

    // JST秒を年月日時分秒の形式に変換
    gmtime_r(&jst_seconds, jst_time);
}

int main() {
    // 例: GPS時刻(秒単位)
    time_t gps_seconds = 1357041600; // 任意のGPS時刻を秒で指定

    struct tm jst_time;
    gps_to_jst_time(gps_seconds, &jst_time);

    printf("JST Time: %04d-%02d-%02d %02d:%02d:%02d\n",
           jst_time.tm_year + 1900,
           jst_time.tm_mon + 1,
           jst_time.tm_mday,
           jst_time.tm_hour,
           jst_time.tm_min,
           jst_time.tm_sec);

    return 0;
}