#include <stdio.h>
#include <time.h>
#include <sys/time.h>
/*
time_t time(time_t t)
返回UTC时间
*/
time_t GetTimerSecond(void)
{
struct timeval tv;
struct timezone tz;
gettimeofday( &tv, &tz);
return tv.tv_sec - tz.tz_minuteswest * 60; /// 本地时间:秒单位
//return tv.tv_sec; /// UTC时间:秒单位
/// 获得毫秒级,当前系统时间
return tv.tv_sec * 1000 - tz.tz_minuteswest * 60 * 1000 + tv.tv_usec / 1000;
}
///struct tm *localtime(const time_t *clock);
///localtime_r(&UTCTime, &tm_time); //这里有时区转换, 从UTC时间转为本地时间
/*
struct tm st
{
st.tm_year = sysTime.year - 1900;
st.tm_mon = sysTime.month- 1;
st.tm_mday = sysTime.day;
st.tm_hour = sysTime.hour;
st.tm_min = sysTime.minute;
st.tm_sec = sysTime.second;
st.tm_isdst = 0;
}
*/
/// ***localtime和localtime_r有时区转换,UTC加时区
void LocalTime(time_t *T,struct tm *s_tm1)
{
struct tm s_tm;
tzset();
///s_tm = localtime(T); /// 将UTC时间,转换成本地时间
localtime_r(T,&s_tm); /// 功能与localtime一样,但是可重入,前者不可。
#if 1
fprintf(stdout,"TTT-localtime-[%d]-[%d]-[%d]:[%d]:[%d]:[%d]\n",
s_tm.tm_year+1900,
s_tm.tm_mon+1,
s_tm.tm_mday,
s_tm.tm_hour,
s_tm.tm_min,
s_tm.tm_sec);
#endif
s_tm1->tm_year = s_tm.tm_year;
s_tm1->tm_mon = s_tm.tm_mon;
s_tm1->tm_mday = s_tm.tm_mday;
s_tm1->tm_hour = s_tm.tm_hour;
s_tm1->tm_min = s_tm.tm_min;
s_tm1->tm_sec = s_tm.tm_sec;
}
/// mktime***有时区转换,本地时间减时区
///time_t mktime(struct tm * timeptr);
void mkTime(struct tm *s_tm)
{
/// 将系统时间的结构体,转成UTC秒数
printf("TTT--mktime[%ld]\n",(long int)mktime(s_tm));
}
/// gmtime***无时区转换
//2016-04-18测试无时区转换
///struct tm *gmtime(const time_t *time);
void gmTime(time_t *T)
{
struct tm *s_tm;
s_tm = gmtime(T);
/// 将UTC时间的秒数,转换成照样是UTC时间的年月日结构体
fprintf(stdout,"TTT-gmtime-[%d]-[%d]-[%d]:[%d]:[%d]:[%d]\n",
s_tm->tm_year+1900,
s_tm->tm_mon+1,
s_tm->tm_mday,
s_tm->tm_hour,
s_tm->tm_min,
s_tm->tm_sec);
}
/// ctime***有时区转换,UTC加时区
///char *ctime(const time_t *time);
void cTime(time_t *time)
{
/// 将UTC时间的秒数,转换成本地时间的年月日字符串
printf("TTT-ctime-[%s]\n",ctime(time));
}
/// asctime***无时区转换
///asctime
///把timeptr指向的tm结构体中储存的时间转换为字符串字符串格式返回
void ascTime(struct tm *s_tm)
{
///将本地时间的结构体,转换成本地时间的年月日字符串
printf("TTT--asctime--[%s]\n",asctime(s_tm));
}
*trftime
函数功能:将时间格式化,或者说:格式化一个时间字符串。
头文件:time.h
函数原型:我们可以使用strftime()函数将时间格式化为我们想要的格式。它的原型如下:
*/
///size_tstrftime(char*strDest,size_tmaxsize,constchar*format,conststructtm*timeptr);
/*
echo(strftime("%b %d %Y %X", mktime(20,0,0,12,31,98)));
echo(gmstrftime("%b %d %Y %X", mktime(20,0,0,12,31,98)));
//输出当前日期、时间和时区
echo(gmstrftime("It is %a on %b %d, %Y, %X time zone: %Z",time()));
?>输出:
Dec 31 1998 20:00:00
Dec 31 1998 19:00:00
It is Wed on Jan 25, 2006, 11:32:10 time zone: W. Europe Standard Time
*/
void trfTime()
{
}
int main()
{
time_t Time;
struct tm s_tm;
fprintf(stdout,"TTT--NOW time[%ld]--getTimeSecond[%ld]\n",(long int)time(NULL),(long int)GetTimerSecond());
fprintf(stdout,"TTT--timeZone8[%ld]\n",(long int)GetTimerSecond() - (long int)time(NULL));
Time = time(NULL);
LocalTime(&Time,&s_tm);
mkTime(&s_tm);
Time = time(NULL);
gmTime(&Time);
cTime(&Time);
ascTime(&s_tm);
return 0;
}