天天看点

c语言 获取本地utc时间

一、获取时间戳

void get_local_timestamp
{
	/* 获取本地utc时间 */
	struct timeval tv;
    gettimeofday(&tv, NULL);
    
    /* utc时间 单位 秒*/
    long timestamp = tv.tv_sec;
    
	/* utc时间 单位 毫秒 */
	long long timestamp = tv.tv_sec*1000 + tv.tv_usec/1000;
	
	/* utc时间 单位 微秒 */
	long long timestamp = tv.tv_sec*1000*1000 + tv.tv_usec;

	/* utc时间字符串 */
	char timeStr[20];
	memset(timeStr, 0, sizeof(timeStr));
	sprintf(timeStr, "%d", timestamp);		// int
	sprintf(timeStr, "%ld", timestamp);		// long
	sprintf(timeStr, "%lld", timestamp);	// long long

	/* utc时间字符串转换为整型 */
	int timeInt = atoi(timeStr);			// 转成整型 int
	long timeLong = atol(timeStr);			// 转成长整型 long 
	long long timeLLong = atoll(timeStr);	// 转成长长整型 long long
}
           

二、获取本地时间

/* 判断是否为闰年 */
#define IsLeapYear(year)   (((year) % 4 == 0) && (((year) % 100 != 0) || ((year) % 400 == 0)))

/* 获取星期 */
int WeekDay(int year, int month, int day)
{
    int monthday[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
    int days = (year- 1) % 7 + (year- 1) / 4 - (year- 1) / 100 + (year- 1) / 400;
    year += monthday[month-1] + day;
    if (IsLeapYear(year) && month> 2)
    {
    	days++;
    }
    return (days % 7);
}

/* 获取utc时间 */
void get_utc_time
{
	struct tm *tm;
	time_t t;		
	time(&t);
	tm = localtime(&t);
		
	int year = tm->tm_year+1900;
	int month = (uint8)tm->tm_mon+1;
	int day = (uint8)tm->tm_mday;
	int hour = (uint8)tm->tm_hour;
	int minite = (uint8)tm->tm_min;
	int second = (uint8)tm->tm_sec;
	int week = WeekDay(datatime->year,datatime->month,datatime->day);
}
           

三、获取格林时间,没有加上时区

void get_rtc_time
{
	struct tm *tm;
	time_t t;		
	time(&t);
	tm = gmtime(&t);
		
	int year = tm->tm_year+1900;
	int month = (uint8)tm->tm_mon+1;
	int day = (uint8)tm->tm_mday;
	int hour = (uint8)tm->tm_hour;
	int min = (uint8)tm->tm_min;
	int sec = (uint8)tm->tm_sec;
	int week = WeekDay(year,month,day);
}
           

继续阅读