时区转换函数

来源:互联网 发布:网络鬼差系统txt下载 编辑:程序博客网 时间:2024/05/18 01:43

typedef struct

{

    int year;

    int month;

    int day;

}Date;

 

typedef stuct

{

   int hour;

   int minute;

   int second;

}Time;

typedef struct

{

    Date date;

    Time time;  

}DateTime;

 

// 在时区的定义上,有些时区与格林威治时间相差的时间可能不是整数个小时,可能时一个半个小时,所以下面用分钟表示与格林威治时间相差的时间。

const int time_zones[] =

{

       -60 * 11, // 西11区

       -60 * 10 // 西10区

....
}

Set:

time_a =  a时区的时间, time_zone_a = 与格林威治时间相差的时间

则对应的格林威治时间 time_a_gmt = time_a + time_zone_a,

time_a = time_a_gmt - time_zone_a;

所以a,b 两个时区时间的关系则为 time_b = time_a_gmt - time_zone_b = time_a + time_zone_a - time_zone_b;

 

// TimeZone是一个枚举值,value与time_zones中的数组下标相对应。

int convertDateTimeBetweeenTimeZones(DateTime* p_from_datetime, TimeZone from_time_zone, DateTime* p_to_datetime, TimeZone to_time_zone )

{

 

     int minitues =  time_zones[from_time_zone] - time_zones[to_time_zone];

 

     if(!p_from_datetime || !p_to_datetime)

     {

         return 0;

     }

     memcpy(p_to_datetime, p_from_datetime, sizeof(DateTime) );

     dateTimeAdd(p_to_datetime, MINUTE, minitues);

     return 1;

}

原创粉丝点击