zoukankan      html  css  js  c++  java
  • Unix时间戳与C# DateTime时间类型、C语言互换 1970-01-01 00:00:00

    和同事的下位机交互的时候,需要使用到时间转换,

    刚好找到这篇文章,用C语言实现的话,还挺麻烦的

    下面给出C#和C的源码

    注:C# 转自 http://www.cnblogs.com/hanhualangzi/archive/2012/02/10/2345952.html

         C源码是同事给我的;

    C#:

     1 dangranusing System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace WWFramework.DateTimes
     6 {
     7     /// <summary>
     8     /// 时间相关函数
     9     /// </summary>
    10     public static class Function
    11     {
    12         /// <summary>
    13         /// 将Unix时间戳转换为DateTime类型时间
    14         /// </summary>
    15         /// <param name="d">double 型数字</param>
    16         /// <returns>DateTime</returns>
    17         public static System.DateTime ConvertIntDateTime(double d)
    18         {
    19             System.DateTime time = System.DateTime.MinValue;
    20             System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
    21             time = startTime.AddSeconds(d);
    22             return time;
    23         }
    24 
    25         /// <summary>
    26         /// 将c# DateTime时间格式转换为Unix时间戳格式
    27         /// </summary>
    28         /// <param name="time">时间</param>
    29         /// <returns>double</returns>
    30         public static double ConvertDateTimeInt(System.DateTime time)
    31         {
    32             double intResult = 0;
    33             System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
    34             intResult = (time - startTime).TotalSeconds;
    35             return intResult;
    36         }
    37     }
    38 }

    C源码:

      1 struct tm
      2 {
      3         uint32     tm_sec;         /* seconds after the minute - [0, 59]   */
      4         uint32     tm_min;         /* minutes after the hour - [0, 59]     */
      5         uint32     tm_hour;        /* hours since midnight - [0, 23]       */
      6         uint32     tm_mday;        /* day of the month - [1, 31]           */
      7         uint32     tm_mon;         /* months since January - [0, 11]       */
      8         uint32     tm_year;        /* year since 1900                      */
      9         uint32     tm_wday;        /* days since Sunday - [0, 6]           */
     10         uint32     tm_yday;        /* days since January 1 - [0, 365]      */
     11         uint32     tm_isdst;       /* Daylight Saving Time flag            */
     12 };
     13 tm  time;
     14 void localtime_h(uint32 time, struct tm *ret_time)
     15 {
     16     static const char month_days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
     17     static const char leap_year[4] = {0, 0, 1, 0};
     18     uint32 j = 0;
     19     uint32 day_count = 0;
     20     uint32 i = 0;
     21     uint32 leave_for_fouryear = 0;
     22     uint32 four_year_count = 0;
     23     uint32 temp_value = 0;
     24     uint32 leave_for_year_days;
     25     uint32 leave_for_month_days;
     26     //time=time-28800;
     27     ret_time->tm_sec = 0;
     28     ret_time->tm_min = 0;
     29     ret_time->tm_hour = 0;
     30     ret_time->tm_wday = 0;
     31     ret_time->tm_year = 0;
     32     ret_time->tm_mday = 0;
     33     ret_time->tm_mon = 0;
     34     ret_time->tm_sec = time % 60;
     35     temp_value = time / 60;
     36     ret_time->tm_min = temp_value % 60;
     37     temp_value /= 60; 
     38     temp_value += 8;
     39     ret_time->tm_hour = temp_value % 24;
     40     temp_value /= 24;
     41     ret_time->tm_wday = (temp_value + 4) % 7;
     42     four_year_count = temp_value / (365 * 4 + 1);
     43     leave_for_fouryear = temp_value % (365 * 4 + 1);
     44     leave_for_year_days = leave_for_fouryear; 
     45    for (i = 0; i < 4; i++)
     46    {        
     47         day_count = leap_year[i] ? 366 : 365;
     48         
     49         if (leave_for_year_days <= day_count)
     50         {
     51             break;
     52         }
     53         else
     54         {
     55             leave_for_year_days -= day_count;
     56         }
     57    }
     58     ret_time->tm_year = four_year_count * 4 + i ;
     59     ret_time->tm_yday = leave_for_year_days;
     60     leave_for_month_days = leave_for_year_days;
     61    for (j = 0; j < 12; j++)
     62    {
     63        if (((leap_year[i])) && (j == 1))
     64        {
     65            if (leave_for_month_days <= 29)
     66            {
     67                break;
     68            }
     69            else if (leave_for_month_days == 29)
     70            {
     71                i++;
     72                leave_for_month_days = 0;
     73                break;
     74            }
     75            else
     76            {
     77                leave_for_month_days -= 29;
     78            }
     79            
     80            continue;    
     81        }
     82                
     83        if (leave_for_month_days < month_days[j])
     84        {
     85            break;
     86        }
     87        else if(leave_for_month_days == month_days[j]){
     88            i++;
     89            leave_for_month_days = 0;
     90            break;
     91        }
     92        else
     93        {
     94            leave_for_month_days -= month_days[j];
     95        }                
     96    }
     97    ret_time->tm_mday = leave_for_month_days + 1;
     98    ret_time->tm_mon = j;
     99 }
    100 void ConvSecTimeToCalendar(struct tm *t_tm,uint32 t)
    101 {
    102     t=(t>=28800)?(t-28800):t;
    103     localtime_h(t,t_tm);
    104     t_tm->tm_year +=1970;
    105     t_tm->tm_mon +=1;
    106 }
  • 相关阅读:
    javascript操作样式
    JavaScript开发
    JavaScript开发
    JavaScript开发
    网页设计
    会员登录界面设计
    用表格模拟实现一个菜鸟教程的网站遇到的问题
    数据库---数据控制语言(DCL)
    数据库---数据库查询的各种子句
    数据库表--增删改查的操作实例
  • 原文地址:https://www.cnblogs.com/craigtao/p/3973056.html
Copyright © 2011-2022 走看看