2009-06-17 51 views
3

我一直在尋找一個日期的數字表示和午夜(UTC)的unix時間似乎是合理的選擇。然而,正如我在我的數學技能也不太清楚,所以是UTC時區的午夜與unix時間戳

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

其中date是UNIX時間戳,做到這一點的呢?有沒有更簡單的方法?

回答

5

是的,你的公式是一個完美的方式。完成同樣事情的另一種方式是:

date = (date/86400) * 86400; 

值得注意的是,上面的公式假設整數(截斷)除法。另外,我覺得86400是一個常用的常量,它可以在沒有額外註釋的情況下出現在源代碼中。

0

只需使用strtotime而不包含時間部分。

+0

不適用於MySQL和haXe :) – vava 2009-06-17 13:54:04

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); 

我想環形車到字符串/從字符串方法也可以,但我不會推薦它。 (%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時間內一個UNIX日保證始終爲86400 UNIX秒,所以我看不到您的原始解決方案存在任何問題。