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