我正在尝试以 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 日,星期五。为什么在我设置日期格式时会添加另一天?
最佳答案
NSDateFormatter
已经处理了时区问题。由于您之前向 NSDate
添加了 8 小时,因此您实际上添加了两次 8 小时。
现在,一个提示:
NSDate
是一个时间点。它计算自引用日期以来经过了多少秒(我相信它是格林威治标准时间 1970 年 1 月 1 日 00:00)。如果您确实想引用该点之前或之后的时间,则仅更改 NSDate
。将 NSDate
视为时间机器。如果您通过电话与居住在海外的 friend 通话,您可能处于不同的时区,因此时钟显示的时间会有所不同,但你们都处于同一时间点。
如果要处理时区,请使用 NSCalendar
或 NSDateFormatter
。他们不仅可以处理时区,还可以处理夏令时和一些东方日历。
关于ios - NSDateFormatter 添加多余的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39913422/