Unix时间戳转北京时间 UTC时间转北京时间 C代码实现

话不多说,直接上代码

结构体定义

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
typedef unsigned  int uint32_t;
typedef unsigned  char uint8_t;
typedef struct 
{
	uint8_t year;
	uint8_t month;
	uint8_t day;
	uint8_t hour;
	uint8_t minute;
	uint8_t second;
}RTC_TimeTypeDef;

Unix时间戳转北京时间,用到“time.h”头文件,是C语言的标准库,使用localtime函数进行转换。

//@brief  Unix时间戳转北京时间
//@param  带入时间戳值
//---------------------------------------
RTC_TimeTypeDef unixTimeStamp_to_beijingTime(uint32_t time)
{
	time_t t_unix;				//时间撮
	struct tm *lt;
	RTC_TimeTypeDef t_location;	//本地时间
	t_unix=time+28800;			//Unix时间+8小时为北京时间
	lt=localtime(&t_unix);
	t_location.year=lt->tm_year-100;
	t_location.month=lt->tm_mon+1;
	t_location.day=lt->tm_mday;
	t_location.hour =lt->tm_hour;
	t_location.minute=lt->tm_min;
	t_location.second=lt->tm_sec;
	return t_location;
}

北京时间转Unix时间戳,使用mktime函数进行转换。

//@brief  北京时间转Unix时间戳
//@param  返回时间戳
//---------------------------------------
uint32_t beijingTime_to_unixTimeStamp(RTC_TimeTypeDef t_location)
{
	time_t t_unix;//时间撮
	struct tm tmCurrentTime;
	tmCurrentTime.tm_year=t_location.year+2000-1900;
	tmCurrentTime.tm_mon=t_location.month-1;
	tmCurrentTime.tm_mday=t_location.day;
	tmCurrentTime.tm_hour=t_location.hour;
	tmCurrentTime.tm_min=t_location.minute;
	tmCurrentTime.tm_sec=t_location.second;
	t_unix = mktime(&tmCurrentTime);
	return (uint32_t)(t_unix-28800);
}

UTC时间转化成北京时间,思路:把UTC时间转换成时间戳,然后时间戳数值加上八小时,再把时间戳转化成北京时间。

//@brief  UTC时间转化成北京时间,北京时间=UTC+8
//@param  
//---------------------------------------
RTC_TimeTypeDef utcSwitchLocal(RTC_TimeTypeDef temp_utc)
{
	RTC_TimeTypeDef temp_rtc;
	time_t t_unix;			//时间撮
	t_unix=beijingTime_to_unixTimeStamp(temp_utc);
	t_unix+=8*60*60;		//时间撮加上八个小时
	temp_rtc=unixTimeStamp_to_beijingTime(t_unix);
	return temp_rtc;
}

运行main函数

{
	RTC_TimeTypeDef tempTime;
	uint32_t tempUnixTime=1550832441;
	tempTime=unixTimeStamp_to_beijingTime(tempUnixTime);
	printf("unix timestamp=%d beijingTime=%d/%d/%d %d:%d:%d\r\n",tempUnixTime,tempTime.year,tempTime.month,tempTime.day,tempTime.hour,tempTime.minute,tempTime.second);
	tempTime.year=19;
	tempTime.month=2;
	tempTime.day=22;
	tempTime.hour=19;
	tempTime.minute=8;
	tempTime.second=10;
	printf("unix time=%d/%d/%d %d:%d:%d ",tempTime.year,tempTime.month,tempTime.day,tempTime.hour,tempTime.minute,tempTime.second);
	tempTime=utcSwitchLocal(tempTime);
	printf("beijingTime=%d/%d/%d %d:%d:%d\r\n",tempTime.year,tempTime.month,tempTime.day,tempTime.hour,tempTime.minute,tempTime.second);
	system("pause"); 
	return 0;
}

复制以上代码,直接可运行。当然我也上传了文件此文件,下载链接:https://download.csdn.net/download/fengweibo112/10971671
直接运行结果如下:
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值