【c语言】写一个程序获取现在的准确时间(精确到秒)

目录

1.完整代码

2.效果展示

3.代码思路


假想你流落荒野,没有信号,没有wifi,此刻只有一台电脑,但是电脑的时间又不准了!但是你的电脑上有一个编译器,不要害怕,让我们来自己编写一个代码,获取准确时间。

1.完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int psecond;
int alltime;
int pminute;
int phour;

// THE function aim to get the second minute hour;
void timesmh(int *second, int *minute, int *hour);

// THE function aim to get the day month year;
void timedmy(int *day, int *month, int *year);

int main()
{
  //do
  //{

    int *second = (int *)malloc(sizeof(int));
    int *minute = (int *)malloc(sizeof(int));
    int *hour = (int *)malloc(sizeof(int));
    int *day = (int *)malloc(sizeof(int));
    int *month = (int *)malloc(sizeof(int));
    int *year = (int *)malloc(sizeof(int));

    timesmh(second, minute, hour);
    psecond = *second;
    timedmy(day, month, year);

    if ((*year%4 == 0 && *year%100!=0) || *year%400==0)
    {
      printf("this year is a leap year!\n");
    }
    else
    {
      printf("this year is a common year!\n");
    }
    printf("the time now is:%02d-%02d-%02d-%02d-%02d-%02d\n", *year, *month, *day, *hour + 8, *minute, *second);
    //system("cls");
 // } while (1);
  return 0;
}

void timesmh(int *second, int *minute, int *hour)
{
  alltime = time(NULL);
  psecond = (alltime % 60);
  *second = psecond;

  pminute = ((alltime - psecond) / 60) % 60;
  *minute = pminute;
  
  phour = ((((alltime - psecond) / 60) - pminute) / 60) % 24;
  *hour = phour;
 
}

void timedmy(int *day, int *month, int *year)
{
  int allday = ((((alltime - psecond) / 60) - pminute) / 60) / 24;
  int count, is = 1;
  count = allday - 365 - 365 - 366;

  while (count >= 365)
  {
    if (is % 4 == 0)
    {
      count -= 366;
    }
    else
    {
      count -= 365;
    }
    is++;
  }

  *year = 1972 + is;
  
  if (is % 4 == 0)
  {
    int runyear[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    for (is = 0; count > runyear[is]; is++)
    {
      count -= runyear[is];
    }
  }
  else
  {
    int pingyear[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    for (is = 0; count > pingyear[is]; is++)
    {
      count -= pingyear[is];
    }
  }
  *month = is + 1;
  *day = count + 1;

}

注:如果想看到时间一秒一秒不停的走动,在程序中加上循环(取消程序中do-while循环的注释,同时取消清屏操作system(“cls”)的注释即可)

2.效果展示

                                   同时还加上了平闰年的判断!

3.代码思路

在头文件#include<time.h>中包含了时间函数time(NULL);得到的是从1970年1月1日到现在的总秒数!(但是由于是英国的格林威治时间,所以与中国的时差相差8个小时,需要手动在最后小时上加上8个小时误差,其他不变)我的程序中应用了指针,用两个函数分别处理(年,月,日)和(小时,分钟,秒数)。其中秒数,分钟和小时正常用加减乘除,取余就可以完成,没有什么误差。但是由于平年闰年,还有不同月份天数不同的影响,会对日期产生误差。所以首先需要判断平闰年,如何分别用数组记录下平闰年不同的月份对应的天数

int runyear[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int pingyear[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

平闰年的判断:

if ((*year%4 == 0 && *year%100!=0) || *year%400==0)
    {
      printf("this year is a leap year!\n");
    }
    else
    {
      printf("this year is a common year!\n");
    }

能被4整除,但是不能被100整除,或者能被400整除的是闰年!

(指针具体问题关注我,看《浅入指针剖析》,私信交流,随时回复)

作者:程序猪学编程

感谢阅读!关注博主,一起交流!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

螺丝工人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值