Желаемый язык / библиотеки?
Я возьму C со стандартными библиотеками UNIX.
time.h
было бы прекрасно.
#include <time.h>
struct tm date_tm;
time_t date;
localtime_r(NULL, &date_tm);
date_tm.tm_sec = 0;
date_tm.tm_min = 0;
date_tm.tm_hour = 0;
date = mktime(&date_tm);
Я полагаю, что метод round-out to-string / from-string тоже будет работать, но я бы не рекомендовал его. ( %F
и %Z
должны быть обязательными для C99 и / или некоторых спецификаций POSIX или SUS.)
#define DATE_FORMAT "%F %Z" /* yyyy-mm-dd t-z */
char date_str[15];
struct tm date_tm;
time_t date;
localtime_r(NULL, &date_tm);
strftime(date_str, sizeof(date_str), DATE_FORMAT, &date_tm);
strptime(date_str, DATE_FORMAT, &date_tm);
date = mktime(&date_tm);
Хм, я не заметил сначала, что вы хотите UTC. Поскольку в один UNIX-день всегда будет 86400 UNIX секунд во время UNIX, я не вижу никаких проблем с вашим оригинальным решением.