需要在 objective-c 获得中央时间

need to get central time in objective-c

我有一个需要获取当前时间 (CST) 的应用程序。我正在尝试使用以下代码,但 NDate 与 GMT 相同:

NSDate* date = [NSDate date];
    NSLog(@"Time is %@", [date description]);

    [NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CST"]];
    NSDate* nDate = [NSDate date];
    NSLog(@"Central time is%@", [nDate description])

but the NSDate is the same as GMT

没错,如果您查看打印输出,它显示的是格林威治标准时间。因此,它为您提供了正确答案 — 日期时间,现在,以格林威治标准时间表示。当前时间 CST 它向您显示的 GMT 日期时间。

这就是 description 所做的。如果这不是您想要的,您为什么使用 description

NSDate 没有时区。这是一个及时的时刻。一个时刻存在于所有时区。它从 -description 给出的字符串必须选择一个时区来表示时刻,因为这是我们编写日期和时间的方式,但它选择的是任意的。 中用于描述的时区不可能代表关于NSDate对象性质的任何基本事实。

如果要将日期格式化为字符串,请不要使用 -description,因为它定义不明确。 (例如,它使用的时区在 OS X 版本之前已经更改,并且可能会再次更改。)使用 NSDateFormatter。您可以通过设置 timeZone 属性.

来为 NSDateFormatter 配置时区

如果您想获取有关日期的信息,例如月、日、小时、分钟等,请使用 NSCalendarNSDateComponents

除了时间本身没有时区这一事实之外,您还必须添加一个日历以根据我描述的时区设置它 here, you should not use a tz abbreviation as described here