zoukankan      html  css  js  c++  java
  • 闰年判断_天数加减_UTC时区转换

      1 #include "stdio.h"
      2 #include "stdint.h"
      3 #include "stdbool.h"
      4 
      5 typedef struct
      6 {
      7     int year;
      8     int8_t month;
      9     int8_t day;
     10     int8_t hour;
     11     int8_t minute;
     12     int8_t second;
     13 }DATE_Stru;
     14 
     15 bool IsLeapYear(int year)
     16 {
     17     if(((0 == (year % 4))&&(0 != (year % 100))) ||
     18         (0 == (year % 400)))
     19     {
     20         return true;
     21     }
     22     else
     23     {
     24         return false;
     25     }
     26 }
     27 
     28 void AddOneMonth(DATE_Stru *src)
     29 {
     30     src->month += 1;
     31     if(src->month > 12)
     32     {
     33         src->month = 1;
     34         src->year += 1;
     35     }
     36 }
     37 
     38 void SubOneMonth(DATE_Stru *src)
     39 {
     40     src->month -= 1;
     41     if(src->month < 1)
     42     {
     43         src->month = 12;
     44         src->year -= 1;
     45     }
     46 }
     47 
     48 void AddOneDay(DATE_Stru *src)
     49 {
     50     uint8_t overflow_day_flg = 0;
     51 
     52     src->day += 1;
     53 
     54     if((1 == src->month)||
     55         (3 == src->month)||
     56         (5 == src->month)||
     57         (7 == src->month)||
     58         (8 == src->month)||
     59         (10 == src->month)||
     60         (12 == src->month))
     61     {
     62         /* 31day */
     63         if(src->day > 31)
     64         {
     65             overflow_day_flg = 1;
     66         }
     67     }
     68     else if((4 == src->month)||
     69             (6 == src->month)||
     70             (9 == src->month)||
     71             (11 == src->month))
     72     {
     73         /* 30day */
     74         if(src->day > 30)
     75         {
     76             overflow_day_flg = 1;
     77         }
     78     }
     79     else
     80     { /* February */
     81         if(IsLeapYear(src->year))
     82         {/* 29day */
     83             if(src->day > 29)
     84             {
     85                 overflow_day_flg = 1;
     86             }
     87         }
     88         else
     89         {/* 28day */
     90             if(src->day > 28)
     91             {
     92                 overflow_day_flg = 1;
     93             }
     94         }
     95     }
     96 
     97     if(1 == overflow_day_flg)
     98     {
     99         src->day = 1;
    100         AddOneMonth(src);
    101     }
    102 }
    103 
    104 void SubOneDay(DATE_Stru *src)
    105 {
    106     src->day -= 1;
    107 
    108     if(src->day < 1)
    109     {
    110         SubOneMonth(src);
    111         if((1 == src->month)||
    112             (3 == src->month)||
    113             (5 == src->month)||
    114             (7 == src->month)||
    115             (8 == src->month)||
    116             (10 == src->month)||
    117             (12 == src->month))
    118         {
    119             /* 31day */
    120             src->day = 31;
    121         }
    122         else if((4 == src->month)||
    123                 (6 == src->month)||
    124                 (9 == src->month)||
    125                 (11 == src->month))
    126         {
    127             /* 30day */
    128             src->day = 30;
    129         }
    130         else
    131         { /* February */
    132             if(IsLeapYear(src->year))
    133             {/* 29day */
    134                 src->day = 29;
    135             }
    136             else
    137             {/* 28day */
    138                 src->day = 28;
    139             }
    140         }
    141     }
    142 }
    143 
    144 /*
    145 zone: 1 ~ 23
    146 */
    147 void ConvertUTCToOtherZone(DATE_Stru *src, uint8_t zone)
    148 {
    149     uint8_t add_day_flg = 0;
    150 
    151     src->hour += zone;
    152 
    153     if(src->hour >= 24)
    154     {
    155         src->hour -= 24;
    156         AddOneDay(src);
    157     }
    158 }
    159 
    160 void ShowDate(DATE_Stru *src)
    161 {
    162     printf("%d-%hhu-%hhu
    ",src->year, src->month, src->day);
    163 }
    164 
    165 void ShowTime(DATE_Stru *src)
    166 {
    167     printf("%hhu:%hhu:%hhu
    ", src->hour, src->minute, src->second);
    168 }
    169 
    170 int main(int argc, char** argv)
    171 {
    172     DATE_Stru src = {0};
    173 
    174     while(1)
    175     {
    176         printf("please input the year number: 
    ");
    177         scanf("%d", &src.year);
    178 
    179         printf("please input the month number: 
    ");
    180         scanf("%hhu", &src.month);
    181 
    182         printf("please input the day number: 
    ");
    183         scanf("%hhu", &src.day);
    184 
    185         ShowDate(&src);
    186         AddOneDay(&src);
    187         ShowDate(&src);
    188         SubOneDay(&src);
    189         ShowDate(&src);
    190 
    191         ConvertUTCToOtherZone(&src, 8);
    192         ShowDate(&src);
    193         ShowTime(&src);
    194 
    195         ConvertUTCToOtherZone(&src, 8);
    196         ShowDate(&src);
    197         ShowTime(&src);
    198 
    199         ConvertUTCToOtherZone(&src, 10);
    200         ShowDate(&src);
    201         ShowTime(&src);
    202     }
    203 
    204     return 0;
    205 }
     
  • 相关阅读:
    Lua 有关字符串的剪切 以及匹配
    [Decode error
    mac 终端 常用命令
    mac apache 相关终端命令
    spring boot架构设计——权限验证及API接口统一返回格式
    ios 官网文档翻译—Create a Table View(swift)
    quicksqlite简介
    android ndk 环境搭建和简单实例
    android 关闭软键盘
    android 弹出全局加载等待动画
  • 原文地址:https://www.cnblogs.com/chenxiaolinembed/p/7645750.html
Copyright © 2011-2022 走看看