当我为该对象创建一个对象NSDate
并将光标放在该对象上时,它显示的当前日期如下
当我尝试记录该对象时,它显示的日期为负 5:30 小时,如下所示
当我将偏移量添加到日期并将光标放在该对象上时,它显示的日期加上 5:30hr 如下所示
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
当我尝试记录该对象时,它显示的确切日期如下
为什么会这样?这是时区的问题吗?提前致谢。
当我为该对象创建一个对象NSDate
并将光标放在该对象上时,它显示的当前日期如下
当我尝试记录该对象时,它显示的日期为负 5:30 小时,如下所示
当我将偏移量添加到日期并将光标放在该对象上时,它显示的日期加上 5:30hr 如下所示
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
当我尝试记录该对象时,它显示的确切日期如下
为什么会这样?这是时区的问题吗?提前致谢。
NSDate 始终以 GMT 形式出现。因此,您必须根据所需的 timeZone 格式化日期。您可以设置设备 timeZOne,也可以使用 Calendar 设置 timeZOne..
NSDate 描述以国际格式 YYYY-MM-DD HH:MM:SS ±HHMM 返回字符串表示形式,其中 ±HHMM 表示时区偏移(以 GMT 为单位的小时和分钟)。
如果您想要 currentLocale,请使用:
[date descriptionWithLocale:[NSLocale currentLocale]]
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]];