我正在OS X客户端上工作,该客户端假设将消息以及有关客户端当前时区的数据发送到远程服务器。但是,服务器被编程为仅根据此处定义的以下结构处理 Windows 时区格式
typedef struct _TIME_ZONE_INFORMATION {
LONG Bias;
WCHAR StandardName[32];
SYSTEMTIME StandardDate;
LONG StandardBias;
WCHAR DaylightName[32];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION;
我已经设法在OS X框架中找到了一些所需的信息,例如NSTimeZone
,但仅包含部分列表。
也许OS X中有一个类似的结构,可以由某些Cocoa模块生成?
NSTimeZone* localTimeZone = [NSTimeZone localTimeZone];
string(localTimeZone.name.UTF8String);
localTimeZone.daylightSavingTimeOffset;
NStimeZone
类中拥有所有这些信息。您需要弄清楚的第一件事是时区当前是否遵守夏令时,您可以通过 isDaylightSavingTime
属性执行此操作。然后,根据这些信息,您必须找出它遵守 DST 的日期和不遵守 DST 的日期,nextDaylightSavingTimeTransition
属性将为您提供帮助(加上当前是否为夏令时的信息)。有了这个,您可以使用abbreviationForDate:
方法获取时区的名称,一次用于 DST,一次用于非 DST。同样,您可以通过secondsFromGMTForDate:
来计算日期和一些数学的偏差。最后,您必须使用 NSCalendar
来获取一个 NSDateComponents
对象,其中包含两个日期,您可以使用这两个日期填充SYSTEMTIME
结构成员。当然,有些时区不遵守夏令时,您必须考虑这些情况。