相当于 OSX 中的 msdn TIME_ZONE_INFORMATION 结构

equivalent to msdn TIME_ZONE_INFORMATION struct in OSX

我正在开发 OS X 客户端,它可以将消息连同有关客户端当前时区的数据发送到远程服务器。但是,服务器被编程为根据此处定义的以下结构仅处理 windows 时区格式 here

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 class 中拥有所有这些信息。您需要弄清楚的第一件事是该时区当前是否遵守夏令时,您可以通过 isDaylightSavingTime 属性 执行此操作。然后,根据这些信息,您必须找出它遵守夏令时和不遵守夏令时的日期,nextDaylightSavingTimeTransition 属性 将在这方面帮助您(加上当前是否是白天的信息节约时间)。这样一来,您就可以使用 abbreviationForDate: 方法获取时区的名称,一次用于夏令时,一次用于不使用时区。同样,您可以通过 secondsFromGMTForDate: 计算两个日期和一些数学的偏差。最后,您必须使用 NSCalendar 为您的两个日期获取一个 NSDateComponents 对象,您可以用它来填充 SYSTEMTIME 结构成员。当然,有些时区不遵守 DST,您必须考虑这些情况。