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;
}