4

日付の数値表現を探していましたが、真夜中の UNIX 時間 (UTC) が妥当な選択のようです。ただし、数学のスキルがよくわからないので、

date = date - date % (24 * 60 * 60);

UNIXタイムスタンプはどこにdateありますか?その方法は? もっと簡単な方法はありますか?

4

3 に答える 3

6

はい、あなたの公式はそれを行うのに完全に良い方法です。同じことを達成する別の方法は次のとおりです。

date = (date / 86400) * 86400;

上記の式は整数(切り捨て)除算を想定していることに注意してください。また、これ86400は十分に一般的に使用されている定数であり、追加のコメントなしでソースコードに表示できると思います。

于 2009-06-17T19:48:47.893 に答える
1

希望する言語/ライブラリ?

標準の 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 秒であることが保証されているため、元のソリューションに問題はないと思います。

于 2009-06-17T14:46:19.053 に答える
0

時間部分なしで strtotime を使用してください。

于 2009-06-17T13:39:18.703 に答える