无法在 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 中获取当天的开始时间 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章