【问题标题】:NSDateFormatter adds excess timeNSDateFormatter 增加了多余的时间
【发布时间】:2016-10-07 09:02:41
【问题描述】:

我正在尝试以 MMMM dd, EEEE 格式获取当前日期。这就是我所做的

NSDate *utc = [[NSDate alloc] init];
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
NSTimeInterval timeZoneSeconds = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate *DateInLocalTimezone = [utc dateByAddingTimeInterval:timeZoneSeconds];
fmt.dateFormat = @"MMMM dd, EEEE";
NSString *currentDate = [fmt stringFromDate:DateInLocalTimezone];

鉴于,

  • UTC = 2016-10-07 08:55:55 +0000
  • 时区 = gmt+8
  • DateInLocalTimezone = 2016-10-07 16:55:55 +0000
  • currentDate = 10 月 8 日,星期六

currentDate 必须是 10 月 7 日,星期五。为什么在我格式化日期时会添加另一天?

【问题讨论】:

  • 你加了两次 +8 小时我想...删除 DateInLocalTimezone 的内容,然后将您当前的本地/时区设置为 NSDateFormatter

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

NSDateFormatter 已经处理时区问题。由于您之前在 NSDate 中添加了 8 小时,因此实际上您添加了两次 8 小时。

现在,提示:

NSDate 是一个时间点。它计算自参考日期以来已经过去了多少秒(我相信它是 1970 年 1 月 1 日 00:00 GMT)。如果您真的想参考该点之前或之后的时间,请仅更改 NSDate。将NSDate 视为时间机器。如果你和住在海外的朋友通过电话交谈,你可能会在不同的时区,所以时钟显示的时间会有所不同,但你们会在同一时间点。

如果要处理时区,请使用NSCalendarNSDateFormatter。他们不仅可以处理时区,还可以处理夏令时和一些东方日历。

【讨论】:

    【解决方案2】:

    试试这个:

    NSDate *now = NSDate.date;
    NSDateFormatter *fmt = NSDateFormatter.new;
    
    fmt.dateFormat = @"MMMM dd, EEEE";
    
    NSString *currentDate = [fmt stringFromDate:now];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多