當前位置:首頁 » 編程語言 » c語言時間換算

c語言時間換算

發布時間: 2023-06-07 13:55:45

❶ C語言時間,怎麼把time_t類型的時間,轉化成年、月、日、時、分、秒呢

可以使用gmtime函數或localtime函數將time_t類型的時間日期轉換為struct tm類型(年、月、日、時、分、秒)。
使用time函數返回的是一個long值,該值對用戶的意義不大,一般不能根據其值確定具體的年、月、日等數據。gmtime函數可以方便的對time_t類型數據進行轉換,將其轉換為tm結構的數據方便數據閱讀。gmtime函數的原型如下:struct tm *gmtime(time_t *timep);localtime函數的原型如下:struct tm *localtime(time_t *timep);將參數timep所指的time_t類型信息轉換成實際所使用的時間日期表示方法,將結果返回到結構tm結構類型的變數。gmtime函數用來存放實際日期時間的結構變數是靜態分配的,每次調用gmtime函數都將重寫該結構變數。如果希望保存結構變數中的內容,必須將其復制到tm結構的另一個變數中。gmtime函數與localtime函數的區別:gmtime函數返回的時間日期未經時區轉換,是UTC時間(又稱為世界時間,即格林尼治時間)。localtime函數返回當前時區的時間。
轉換日期時間表示形式time_t類型轉換為struct tm類型示例:
#include <stdio.h>
#include <time.h>
int main()
{
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};/*指針字元數組*/ time_t t;
struct tm *p;
t=time(NULL);/*獲取從1970年1月1日零時到現在的秒數,保存到變數t中*/ p=gmtime(&t); /*變數t的值轉換為實際日期時間的表示格式*/
printf("%d年%02d月%02d日",(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(" %s ", wday[p->tm_wday]);
printf("%02d:%02d:%02d\n", p->tm_hour, p->tm_min, p->tm_sec);
return 0;
}
注意:p=gmtime(&t);此行若改為p=localtime(&t);則返回當前時區的時間。

❷ 關於C語言的時間函數

思路:一般做法都是用指定的時間去和一個固定時間來比較,得出此時間與固定時間所差的天數,一般固定時間都使用「1900-01-01」,比如d1與固定時間的差為Num1天,d2與固定時間的差為Nmu2天,那麼d1、d2的天數差就是Num1與Num2間的差值了。最好不要直接用d1和d2來比較,因為不好確定他們之間有多少個閏年、大小月等。
以下代碼是我從其它程序中摘出來的,大體上能滿足你的需求(使用的中文編程,細節自己修改)
#include <stdio.h>
#include <string.h>

typedef unsigned char UNBYTE;
typedef unsigned short UNWORD;
typedef unsigned long UNLONG;
typedef unsigned long DATETIME;

/** 從 0001-01-01 到 1899-12-31 間的天數,故0日期是從1900-01-01開始的 */
const UNLONG n日期開始 = 693594;

/** 時間的轉換系數*/
const UNBYTE n每天時數 = 24;
const UNBYTE n每時分數 = 60;
const UNBYTE n每分秒數 = 60;
const UNWORD n每時秒數 = n每分秒數 * n每時分數;
const UNLONG n每天秒數 = n每天時數 * n每時秒數;

typedef enum
{
TRUE = 0x5A,
FALSE = 0
}UBBOOL;

typedef struct
{
UNBYTE ub_年;
UNBYTE ub_月;
UNBYTE ub_日;
UNBYTE ub_時;
UNBYTE ub_分;
UNBYTE ub_秒;
UNBYTE ub_百分秒;
UNBYTE ub_備用;
}S日歷時鍾; /**8 byte*/

UNBYTE ub_每月天數[2][12] =
{
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

UNBYTE 潤年判斷(const UNBYTE lub_年)
{

if( (lub_年 % 4 == 0) && ((lub_年 % 100 != 0) || (lub_年 % 400 == 0)) )
return 1;
else
return 0;
};

UBBOOL 轉換日期(UNBYTE lub_年, UNBYTE lub_月,UNBYTE lub_日, DATETIME &lub_日期)
{
UNBYTE lub_日表序號 = 0;
UNWORD luw_年;
int i;

/**根據是否為潤年取日表的序號*/
luw_年 = 2000 + lub_年;
lub_日表序號 = 潤年判斷(luw_年);

lub_日期 = lub_日;
if ( (luw_年 >= 2000)
&& (luw_年 <= 2099)
&& (lub_月 >= 1)
&& (lub_月 <= 12)
&& (lub_日 >= 1)
&& (lub_日 <= ub_每月天數[lub_日表序號][lub_月-1]) )
{
/**計算月*/
for( i=0; i<lub_月-2; i++ )
{
lub_日期 += ub_每月天數[lub_日表序號][i];
}

luw_年 -= 1;
lub_日期 += (luw_年 * 365) + (luw_年 / 4) - (luw_年 / 100) + (luw_年 / 400) - n日期開始;
return TRUE;
}
else
{
return FALSE;
}
};

UBBOOL 轉換時間(UNBYTE lub_時, UNBYTE lub_分, UNBYTE lub_秒, DATETIME &lub_時間)
{
if ( (lub_時 < n每天時數) && (lub_分 < n每時分數) && (lub_秒 < n每分秒數) )
{
lub_時間 = (lub_時 * n每時秒數 + lub_分 * n每分秒數 + lub_秒);
return TRUE;
}
else
{
return FALSE;
}
};

UBBOOL 轉換時鍾(S日歷時鍾 &ls_時鍾, DATETIME &ldt_時間)
{
DATETIME dt_日 = 0;
DATETIME dt_秒 = 0;

ldt_時間 = 0;
if ((TRUE == 轉換日期(ls_時鍾.ub_年, ls_時鍾.ub_月, ls_時鍾.ub_日, dt_日))
&&(TRUE == 轉換時間(ls_時鍾.ub_時, ls_時鍾.ub_分, ls_時鍾.ub_秒, dt_秒)))
{
ldt_時間 = dt_日 * n每天秒數 + dt_秒;
return TRUE;
}
else
{
return FALSE;
}
};

void main()
{
DATETIME dt,dt2,cha;
S日歷時鍾 s_now;
S日歷時鍾 s_now2;

s_now.ub_年 = 9;
s_now.ub_月 = 12;
s_now.ub_日 = 15;
s_now.ub_時 = 23;
s_now.ub_分 = 59;
s_now.ub_秒 = 59;

s_now2.ub_年 = 9;
s_now2.ub_月 = 12;
s_now2.ub_日 = 16;
s_now2.ub_時 = 0;
s_now2.ub_分 = 0;
s_now2.ub_秒 = 1;

if(( TRUE == 轉換時鍾(s_now, dt))&&( TRUE == 轉換時鍾(s_now2, dt2)))
{
cha = dt2-dt;
}
else
puts("error");

//////////////////////////////////////////

}

熱點內容
python集合運算符 發布:2025-02-14 03:06:18 瀏覽:205
pic編譯軟體 發布:2025-02-14 03:01:04 瀏覽:984
反編譯在編譯 發布:2025-02-14 02:55:36 瀏覽:418
python列印對象 發布:2025-02-14 02:51:20 瀏覽:573
QRM演算法 發布:2025-02-14 02:45:19 瀏覽:266
c語言列印結構體 發布:2025-02-14 02:42:28 瀏覽:141
編譯技術實驗一 發布:2025-02-14 02:28:24 瀏覽:648
編程手機入門 發布:2025-02-14 02:27:40 瀏覽:734
區域網視頻android 發布:2025-02-14 02:23:56 瀏覽:424
麒麟系統如何安裝安卓程序 發布:2025-02-14 02:07:21 瀏覽:400