实现读取北京时间的C语言程序,时间戳转北京时间,C语言实现

时间戳转北京时间,C语言实现

#include “stdio.h”

#define u8 unsigned char

#define u16 unsigned short

#define u32 unsigned int

//判断是否是闰年函数

//月份 1 2 3 4 5 6 7 8 9 10 11 12

//闰年 31 29 31 30 31 30 31 31 30 31 30 31

//非闰年 31 28 31 30 31 30 31 31 30 31 30 31

//输入:年份

//输出:该年份是不是闰年.1,是.0,不是

u8 Is_Leap_Year(u16 year)

{

if(year%40) //必须能被4整除

{

if(year%1000)

{

if(year%4000)return 1;//如果以00结尾,还要能被400整除

else return 0;

}else return 1;

}else return 0;

}

//设置时钟

//把输入的时钟转换为秒钟

//以1970年1月1日为基准

//1970~2099年为合法年份

//返回值:0,成功;其他:错误代码.

//月份数据表

u8 const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表

//平年的月份日期表

const u8 mon_table[12]={31,28,31,30,31,30,31,31,30,31,30,31};

u32 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)

{

u16 t;

u32 seccount=0;

if(syear<1970||syear>2099)return 1;

for(t=1970;t{

if(Is_Leap_Year(t))seccount+=31622400;//闰年的秒钟数

else seccount+=31536000; //平年的秒钟数

}

smon-=1;

for(t=0;t{

seccount+=(u32)mon_table[t]*86400;//月份秒钟数相加

if(Is_Leap_Year(syear)&&t1)seccount+=86400;//闰年2月份增加一天的秒钟数

}

seccount+=(u32)(sday-1)86400;//把前面日期的秒钟数相加

seccount+=(u32)hour3600;//小时秒钟数

seccount+=(u32)min*60; //分钟秒钟数

seccount+=sec;//最后的秒钟加上去

//RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和BKP外设时钟

//PWR_BackupAccessCmd(ENABLE);//使能RTC和后备寄存器访问

//RTC_SetCounter(seccount);//设置RTC计数器的值

//RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成

seccount-=28800;

return seccount;

}

void main()

{

u32 Time_count;

u8 timeg_H,timeg_L,timed_h,timed_l;

Time_count=RTC_Set(2019,7,22,9,32,55);

printf(“时间戳为=%ld\n”,Time_count);

timeg_H=(u8)(Time_count>>24);

timeg_L=(u8)( (Time_count>>16)&0x00ff );

timed_h=(u8) ( (Time_count>>8)&0x0000ff);

timed_l=(u8) (Time_count&0x000000ff);

printf(“timeg_H=%x ,timeg_L=%x,timed_h=%x,timed_l=%x,\n”,timeg_H,timeg_L,timed_h,timed_l);

printf(“timeg_H=%d ,timeg_L=%d,timed_h=%d,timed_l=%d,\n”,timeg_H,timeg_L,timed_h,timed_l);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值