c mysql對時間加減 C實現時間加減,比較

2021-10-17 22:24:46 字數 2206 閱讀 2271

1. 相關資料結構

time_t

首先看time.**件中隊time_t的定義

#ifndef _time_t_defined

typedef long time_t; /* 時間值 */

#define _time_t_defined /* 避免重複定義 time_t */

#endif

可以看出time_t實際上是乙個整數,它記錄了儲存的是從2023年1月1日0時0分0 秒到現在經過的秒數。這裡有一點要注意,對time_t資料型別的值來說,它所表示的時間不能晚於2023年1月18日19時14分07秒,否則會發生溢位。為了能夠表示更久遠的時間,一些編譯器廠商引入了64位甚至更長的整形數來儲存日曆時間。

struct tm

首先看time.**件中隊time_t的定義

#ifndef _tm_defined

struct tm {

int tm_sec; /* 秒 – 取值區間為[0,59] */

int tm_min; /* 分 - 取值區間為[0,59] */

int tm_hour; /* 時 - 取值區間為[0,23] */

int tm_mday; /* 乙個月中的日期 - 取值區間為[1,31] */

int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */

int tm_year; /* 年份,其值等於實際年份減去1900 */

int tm_wday; /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */

int tm_yday; /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */

int tm_isdst; /* 夏令時識別符號,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不了解情況時,tm_isdst()為負。*/

#define _tm_defined

#endif

ansi c標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。

time_t和struct tm之間是可以相互轉化的

在time.**件中有如下兩個函式

time_t mktime(struct tm * timeptr);

struct tm * localtime(const time_t * timer);

2. 時間加減

從上面對time_t和tm的分析你應該很容易想到如何進行時間的加減操作了吧。一種方法,我們可以對time_t型別的資料直接進行加減秒數操作。另一種方法,可以操作tm結構體內的變數。下面乙個例子實現對當前時間加30分鐘的操作。

#include

#include

int main( int argc, char *ar** )

time_t tmp_time;

struct tm *ptime;

struct tm *tmp;

tmp_time = time(null);//獲取當前時間

ptime = localtime(&tmp_time);

printf("%d-%d-%d %d:%d:%d\n",(1900+ptime->tm_year),(1+ptime->tm_mon),ptime->tm_mday,\

ptime->tm_hour,ptime->tm_min,ptime->tm_sec);

tmp_time += 30*60;

tmp = localtime(&tmp_time);

printf("%d-%d-%d %d:%d:%d\n",(1900+tmp->tm_year),(1+tmp->tm_mon),tmp->tm_mday,\

tmp->tm_hour,tmp->tm_min,tmp->tm_sec);

ptime->tm_min += 30;

printf("%d-%d-%d %d:%d:%d\n",(1900+ptime->tm_year),(1+ptime->tm_mon),ptime->tm_mday,\

ptime->tm_hour,ptime->tm_min,ptime->tm_sec);

return 0;

3. 問題

上面**的執行結果第三個輸出是在第二個輸出的基礎上加了30分鐘。為什麼tmp_time變化會導致*ptime的變化。

另外#include和#include也有區別。

mysql對時間的加減

select timediff 23 40 00 18 30 00 兩時間相減 select substring timediff 23 40 00 18 30 00 1,5 05 10 相減返回小時 分鐘 select datediff 2008 08 08 2008 08 01 7 兩日期相減 ...

C 對時間的操作

獲取當前星期的開始日期和結束日期 private void timebe out string bdate,out string edate else if firstday.dayofweek dayofweek.monday else if firstday.dayofweek dayofwee...

C 中對時間的操作

1 datetime 數字型 system.datetime currenttime new system.datetime 1.1 取當前年月日時分秒 currenttime system.datetime.now 1.2 取當前年 int 年 currenttime.year 1.3 取當前月 ...