NSDateFormatter会增加多余的时间

时间:2016-10-07 09:02:41

标签: ios objective-c nsdate nsdateformatter

我试图以 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必须是星期五的07月10日。为什么我在格式化日期时会再添加一天?

2 个答案:

答案 0 :(得分:2)

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

现在,提示:

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

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

答案 1 :(得分:1)

试试这个:

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

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

NSString *currentDate = [fmt stringFromDate:now];