【问题标题】:Wrong time with NSDate and NSTimezoneNSDate 和 NSTimezone 的时间错误
【发布时间】:2011-11-24 15:17:41
【问题描述】:

我有两个日期(用两个不同的 NSString 写),例如

31/12/2011

31/03/2012

我必须检查今天是否在这个范围内。

为了从 NSString 中读取日期,我这样做:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *mydate = [dateFormatter dateFromString:my_string];
NSLog(@"%@", mydate);

但是,在这个例子中,日志是这个

2011-12-30 23:00:00 +0000
2012-03-30 23:00:00 +0000

所以晚了一个小时。 我知道使用

NSString *string = [dateFormatter stringFromDate:my_date];

我的字符串没问题,但我看不出今天是否在使用 NSString 的范围内(或不在?)!

所以我必须使用NSDate,但是如何解决“时区”问题呢?

另外,我也有这个问题,使用

[NSDate date];

它在一小时前返回给我(我不想要它,因为如果有人在午夜检查,电话会是前一天!)

【问题讨论】:

标签: objective-c cocoa nsdate nsdateformatter nstimezone


【解决方案1】:

以下内容应该有所帮助:

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];

更多详情,请查看This question ...看起来很相似。 “EST”可以替换为所需的任何时区。

【讨论】:

  • 谢谢,现在它可以工作了......但不适用于[NSDate date](这是现在的日期):有了这个我有一小时前的时间(因为我认为它没有使用 dateFormatter) .我该怎么做?
  • 您将需要 dateFormatter 将其设置为所需的时区。当然也可以使用[NSTimeZone defaultTimeZone],然后使用“-(NSTimeInterval)secondsFromGMT”计算偏移量
【解决方案2】:

我可能弄错了,但看起来,在这种情况下,您不需要关心时区。如果您只有 dd/MM/yyyy 格式的日期,当您使用 NSDateFormatter 解析它时,它将默认使用当前时区。因此,当您将与今天的日期进行比较时,所有 3 个日期都将位于同一时区,并且不会执行日期/时间调整。

【讨论】:

  • 如果您不设置时区,它将与 GMT 偏移。如果您将其设置为 2012 年 1 月 1 日凌晨 12 点且未指定时区,则它将是美国东部标准时间 2011 年 12 月 31 日下午 6 点。
  • 是的,我不确定这件事......但是,我们的想法是为所有 3 个 NSDate 值设置相同的时区
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多