【问题标题】:NSDateFormatter return Date in GMT specific timezoneNSDateFormatter 返回 GMT 特定时区的日期
【发布时间】:2014-09-15 08:57:34
【问题描述】:

我想获取特定时区的日期和时间。我把大部分事情都做对了,但最后当我使用NSDateFormatter 方法从NSString 获取日期时,它会返回GMT 特定时区的日期。 [formatter stringFromDate:gmtDate]; 方法返回我预期的日期和时间。当我在执行此方法self.localTime = [formatter dateFromString:str]; 时从字符串 i-e 中获取日期时,就会出现问题。 self.localTime 是我班级中的 NSDate 属性。

因此,当我打印 str 时,它会给出该特定时区的日期和时间,表示为 self.timeZoneID,这也是我班上的 property

        NSDate *gmtDate = [NSDate date];
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setTimeZone:[NSTimeZone timeZoneWithName:self.timeZoneID]];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSString *str = [formatter stringFromDate:gmtDate];
        NSLog(@"Date string : %@", str);
        self.localTime = [formatter dateFromString:str];

知道我得到正确字符串输出的原因是什么,但是当我将它分配给我的property localTime 它给了我GMT 的时间

【问题讨论】:

  • 一个 NSDate 对象是 GMT 时间。你不能改变它(不违反一些规则),你不应该。
  • Set NSDate TimeZone? 的可能重复项

标签: ios objective-c nsdate nsdateformatter nstimezone


【解决方案1】:

原因是 NSDate 有一个默认时区,即 GMT 以供考虑,当用户想要为某个时区设置特定时间时,NSDateFormatter 提供了设置您用于 gmtDate 对象而不是自己的特定时区的方法.localTime(这是采用 GMT 时间,默认时区)。

【讨论】:

  • 那么怎么做...我的意思是 self.localTime = [NSDate date];然后 self.localTime = [formatter dateFromString:[formatter stringFromDate:self.localTime]];这个我试过了,还是不行....
  • 你到底想达到什么目的?!
  • 我想获取某个特定时区的 NSDate。我想要 NSDate 对象而不是 NSString 对象。
  • 对于特定的时区,您需要应用格式化程序,然后使用您在 nsdate 中获得的字符串,默认为 GMT。这就是为什么 nsdateformatter 可以根据我们的位置时区获取时间,或者如果您想根据其他时区显示时间。所以最好在使用格式化程序后保存 str 。也只需检查 nsdate 时间和 GMT 时间(在谷歌上)然后你就明白了。
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 2015-01-08
  • 2012-10-07
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多