From 12d7f9b45303fb458cb21a3e0e430af96c781d8b Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Mon, 24 Mar 2025 22:58:14 +0100 Subject: First commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libgeome_get_from_time.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 libgeome_get_from_time.c (limited to 'libgeome_get_from_time.c') diff --git a/libgeome_get_from_time.c b/libgeome_get_from_time.c new file mode 100644 index 0000000..b512a34 --- /dev/null +++ b/libgeome_get_from_time.c @@ -0,0 +1,38 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" + + +int +libgeome_get_from_time(struct libgeome_context *ctx, struct libgeome_data *out) +{ + time_t utc, local, uoff; + struct tm tm; + + utc = time(NULL); + if (utc < 0) { + ctx->print_error(ctx, "time: %s\n", strerror(errno)); + return -1; + } + if (!localtime_r(&utc, &tm)) { + ctx->print_error(ctx, "localtime_r: %s\n", strerror(errno)); + return -1; + } + + local = (time_t)(tm.tm_hour * 60 * 60); + local += (time_t)(tm.tm_min * 60); + local += (time_t)tm.tm_sec; + utc %= (time_t)(24 * 60 * 60); + uoff = local - utc; + + out->requested_data &= LIBGEOME_DATUM_LONGITUDE; + if (out->requested_data) { + out->longitude = (double)uoff / (24 * 60 * 60 / 360); + out->longitude = fmod(out->longitude, 360); + if (out->longitude < -180) + out->longitude += 360; + else if (out->longitude > 180) + out->longitude -= 360; + } + + return 0; +} -- cgit v1.2.3-70-g09d2