【问题标题】:equivalent to msdn TIME_ZONE_INFORMATION struct in OSX相当于 OSX 中的 msdn TIME_ZONE_INFORMATION 结构
【发布时间】:2016-06-07 23:25:37
【问题描述】:

我正在开发 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;

【问题讨论】:

    标签: c macos cocoa timezone nstimezone


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助。但是,我仍然不确定何时使用日光字段(名称、日期和偏差)以及何时使用标准。也许你可以帮我一些伪代码?
    • @Zohar81 你必须填写两个。标准字段适用于时区不遵守夏令时的情况,基本偏差也是如此(所有时区的标准偏差可能为 0)。日光字段用于时区遵守夏令时。如果时区从不遵守 DST,您可以忽略这些字段。
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多