Полночь в часовой пояс UTC с временной отметкой unix

Я искал числовое представление для даты = даты - даты% (24 * 60 * 60); и unix время в полночь (в UTC), по-видимому, является разумным выбором для этого. Однако, поскольку я не уверен в своих математических навыках,

date

где dateunix timestamp, способ сделать это? Есть ли более простой метод?

math,unix-timestamp,

3

Ответов: 3


5 принят

Да, ваша формула - отличный способ сделать это. Еще один способ добиться того же:

date = (date / 86400) * 86400;

Возможно, стоит отметить, что приведенная выше формула предполагает целочисленное (усечение) деление. Кроме того, я считаю, что 86400это достаточно часто используемая константа, которая может появляться в исходном коде без дополнительного комментария.


1

Желаемый язык / библиотеки?

Я возьму 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, я не вижу никаких проблем с вашим оригинальным решением.


0

Просто используйте strtotime без временной части.

математики, Unix-метка времени,
Похожие вопросы
Яндекс.Метрика