无法在 NSDate 中获取当天的开始时间 [关闭]

Posted

技术标签:

【中文标题】无法在 NSDate 中获取当天的开始时间 [关闭]【英文标题】:Cannot get the beginning of current day in NSDate [closed] 【发布时间】:2013-05-05 14:16:31 【问题描述】:

我需要 NSDate 格式的当天的开始和结束,因为我有一个 nspredicate 来获取此范围之间的数据。所以我写了一个函数来查找当天的开始,就是这样

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
NSDate *start = [calendar dateFromComponents:components];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *strFromDate = [formatter stringFromDate:start];

当我尝试 nslog strFromDate 时,它​​会显示当天的确切开始时间,如下所示 2013-05-05 00:00:00 +0000 但我需要 nsdate 格式的,所以当我尝试将它转换成这样的 nsdate 时

NSDateFormatter * dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *dateStr = [[NSDate alloc]init];
dateStr = [dateFormat dateFromString:strFromDate];

当我 nslog 时,结果变为 2013-05-05 18:30:00 +0000。我尝试了很多代码,当我尝试以 nsstring 格式打印它时,我得到了想要的结果,但不知道 nsdate 出了什么问题。如果有人可以指导我。提前致谢

【问题讨论】:

[[NSDate alloc]init] 这将为您提供现在的日期和时间 “NSDate 格式”是什么意思??? NSDate *start 一个日期。为什么要使用 NSDateFormatter 和字符串? @matt 是的,但是当我尝试 nslog NSDate *start 时,我没有将时间设置为零,我的意思是 00:00:00 "当我尝试 nslog NSDate start 时,我得到的时间是 18:30:00 +0000" 因为那是一天开始的时间。 +0000 是伦敦。您现在是印度时间,比印度时间早 5:30。 这一直出现。人们不能先谷歌吗? ***.com/questions/9442126/… 【参考方案1】:

当我 nslog 时,结果变为2013-05-05 18:30:00 +0000

仔细阅读该结果。最后的+0000 是有意义的。这意味着格林威治标准时间(伦敦时间)。所以这是说时间是伦敦的18:30:00。但是假设你在印度。之后是5:30,也就是午夜。这正是您想要的。

【讨论】:

+1 您可以通过NSLogging -descriptionWithLocale: 并传入[NSLocale currentLocale] 来确认这一点。

以上是关于无法在 NSDate 中获取当天的开始时间 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 ios swift 上获取当天名称的更好方法

提取 NSDate() 的值

查找下周一的 NSDate [关闭]

如何在ios中获取今天日期的开始和结束时间? [复制]

获取当天开始时间的日期

php获取当天的开始时间和结束时间