zoukankan      html  css  js  c++  java
  • Unix UTC时间转化为本地时间的一个MFC实现

      1 #define YEAR_BEGIN      1970
      2 #define LEAPYEAR_DAY    366
      3 #define NORMALYEAR_DAY  365
      4 #define JANUARY         31
      5 #define MARCH           31
      6 #define APRIL           30
      7 #define MAY             31
      8 #define JUNE            30
      9 #define JULY            31
     10 #define AUGUST          31
     11 #define SEPTEMBER       30
     12 #define OCTOBER         31
     13 #define NOVEMBER        30
     14 #define DECEMBER        31
     15 
     16 bool CXXXClass::IsLeapYear(DWORD year)
     17 {
     18     return (((year % 4 == 0) && (year %100 != 0)) || (year % 400 == 0));
     19 }
     20 
     21 bool CXXXClass::UtcTimeToLocalTime(DWORD dwUtc, CString &strUtc)
     22 {
     23     int tmp_day;
     24     DWORD year, month, day;
     25     DWORD sec, mins, hour;
     26     TIME_ZONE_INFORMATION tzi;
     27     ZeroMemory(&tzi, sizeof(TIME_ZONE_INFORMATION));
     28     CString strTimeZone = _T("");
     29     DWORD dwTimeZoneID = GetTimeZoneInformation(&tzi);
     30     if (dwTimeZoneID == TIME_ZONE_ID_UNKNOWN) {
     31         dwUtc -= (tzi.Bias * 60);
     32         strTimeZone = tzi.StandardName;
     33     } else if (dwTimeZoneID == TIME_ZONE_ID_STANDARD) {
     34         dwUtc -= (tzi.Bias * 60 + tzi.StandardBias * 60);
     35         strTimeZone = tzi.StandardName;
     36     } else if ( dwTimeZoneID == TIME_ZONE_ID_DAYLIGHT) {
     37         dwUtc -= (tzi.Bias * 60 + tzi.DaylightBias * 60);
     38         strTimeZone = tzi.DaylightName;
     39     }
     40     hour = dwUtc / 3600;
     41     sec = dwUtc % 3600;
     42     mins = sec / 60;
     43     sec %= 60;
     44 
     45     tmp_day = hour / 24 + 1;
     46     hour %= 24;
     47 
     48     year = YEAR_BEGIN;
     49     while(1) {
     50         if(tmp_day < LEAPYEAR_DAY)
     51             break;
     52         if(IsLeapYear(year)) {
     53             tmp_day -= LEAPYEAR_DAY;
     54         } else {
     55             tmp_day -= NORMALYEAR_DAY;
     56         }
     57         year++;
     58     }
     59 
     60     DWORD feb = IsLeapYear(year) ? 29 : 28;
     61     day = 1;
     62     month = 1;
     63 
     64     for(int i = 0; i < 12; i++) {
     65         day = tmp_day;
     66         switch(i) {
     67             case 0:
     68                 tmp_day -= JANUARY;
     69                 break;
     70             case 1:
     71                 tmp_day -= feb;
     72                 break;
     73             case 2:
     74                 tmp_day -= MARCH;
     75                 break;
     76             case 3:
     77                 tmp_day -= APRIL;
     78                 break;
     79             case 4:
     80                 tmp_day -= MAY;
     81                 break;
     82             case 5:
     83                 tmp_day -= JUNE;
     84                 break;
     85             case 6:
     86                 tmp_day -= JULY;
     87                 break;
     88             case 7:
     89                 tmp_day -= AUGUST;
     90                 break;
     91             case 8:
     92                 tmp_day -= SEPTEMBER;
     93                 break;
     94             case 9:
     95                 tmp_day -= OCTOBER;
     96                 break;
     97             case 10:
     98                 tmp_day -= NOVEMBER;
     99                 break;
    100             case 11:
    101                 tmp_day -= DECEMBER;
    102                 break;
    103             default:
    104                 break;
    105         }
    106         if(tmp_day > 0)
    107             month++;
    108         else
    109             break;
    110     }
    111     if(strTimeZone.IsEmpty())
    112         strUtc.Format(_T("%d-%d-%d %d:%2d:%2d"), year, month, day, hour, mins, sec);
    113     else
    114         strUtc.Format(_T("%s %d-%d-%d %d:%2d:%2d"), (LPCTSTR)strTimeZone, year, month, day, hour, mins, sec);
    115 
    116     return true;
    117 }

    需要做一个获取Android编译生成时间的功能,网上找了些,都不好用,于是自己写了个。现在放上来,做个笔记。

  • 相关阅读:
    linux c 正则表达式
    【编译原理】1. 宏观结构
    编译原理
    知我所未知,方行我所未至
    接口返回值中的状态值设置
    Quotes in shell(bash, csh)
    Blog 081018
    58同城职位分类数据 json
    ckeditor小记
    三大WEB服务器对比分析(apache ,lighttpd,nginx)
  • 原文地址:https://www.cnblogs.com/jojodru/p/2715011.html
Copyright © 2011-2022 走看看