0

当我为该对象创建一个对象NSDate并将光标放在该对象上时,它显示的当前日期如下在此处输入图像描述

当我尝试记录该对象时,它显示的日期为负 5:30 小时,如下所示
在此处输入图像描述

当我将偏移量添加到日期并将光标放在该对象上时,它显示的日期加上 5:30hr 如下所示

NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];

在此处输入图像描述

当我尝试记录该对象时,它显示的确切日期如下

在此处输入图像描述

为什么会这样?这是时区的问题吗?提前致谢。

4

3 回答 3

1

NSDate 始终以 GMT 形式出现。因此,您必须根据所需的 timeZone 格式化日期。您可以设置设备 timeZOne,也可以使用 Calendar 设置 timeZOne..

于 2013-08-16T07:25:47.730 回答
0

NSDate 描述以国际格式 YYYY-MM-DD HH:MM:SS ±HHMM 返回字符串表示形式,其中 ±HHMM 表示时区偏移(以 GMT 为单位的小时和分钟)。

如果您想要 currentLocale,请使用:

[date descriptionWithLocale:[NSLocale currentLocale]]
于 2013-08-16T07:31:01.130 回答
0

NSDate 是一个“原始”日期。这就是为什么它在 GMT 并且您的本地和默认时区是 GMT +5。使用 NSDateFormatter 将日期输出为对用户有意义的值取决于代码。试试这个

NSDate* sourceDate = [NSDate date];

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate]];
于 2013-08-16T07:20:55.017 回答