NSDateFormatter 添加多余的时间

NSDateFormatter adds excess time

我正在尝试以 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];

给定,

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

试试这个:

NSDate *now = NSDate.date;
NSDateFormatter *fmt = NSDateFormatter.new;

fmt.dateFormat = @"MMMM dd, EEEE";

NSString *currentDate = [fmt stringFromDate:now];

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

现在,提示:

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

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