日付の数値表現を探していましたが、真夜中の UNIX 時間 (UTC) が妥当な選択のようです。ただし、数学のスキルがよくわからないので、
date = date - date % (24 * 60 * 60);
UNIXタイムスタンプはどこにdate
ありますか?その方法は? もっと簡単な方法はありますか?
日付の数値表現を探していましたが、真夜中の UNIX 時間 (UTC) が妥当な選択のようです。ただし、数学のスキルがよくわからないので、
date = date - date % (24 * 60 * 60);
UNIXタイムスタンプはどこにdate
ありますか?その方法は? もっと簡単な方法はありますか?
はい、あなたの公式はそれを行うのに完全に良い方法です。同じことを達成する別の方法は次のとおりです。
date = (date / 86400) * 86400;
上記の式は整数(切り捨て)除算を想定していることに注意してください。また、これ86400
は十分に一般的に使用されている定数であり、追加のコメントなしでソースコードに表示できると思います。
希望する言語/ライブラリ?
標準の UNIX ライブラリを備えた C を想定しています。
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);
ラウンドアバウトの 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 の 1 日は、UNIX 時間で常に 86400 UNIX 秒であることが保証されているため、元のソリューションに問題はないと思います。
時間部分なしで strtotime を使用してください。