ios 获得今天凌晨 12 点

标签 ios nsdate nscalendar nsdatecomponents

NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setLocale:[NSLocale currentLocale]];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"US/Central"]];

NSDateComponents *nowComponents = [calendar components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today];

[nowComponents setHour:hour];
[nowComponents setMinute:0];
[nowComponents setSecond:0];

NSLog(@"%@", [calendar dateFromComponents:nowComponents]);

记录 2012-01-01 06:00:00 +0000。根据时区设置时间是正确的,但今天是 7 月 20 日...我做错了什么?

最佳答案

您需要提取年、月和日组件,并构造一个新的 NSDate,如下所示:

NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setLocale:[NSLocale currentLocale]];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"US/Central"]];

NSDateComponents *nowComponents = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];
today = [calendar dateFromComponents:nowComponents];

您不需要获取时间组件然后将它们设置回零:您可以将它们保持为默认值,方法是首先要求提取它们。

关于ios 获得今天凌晨 12 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581870/

相关文章:

objective-c - 关于 NSDateFormatter 和 NSCalendar 的问题(涉及时区)

ios - 当我们过年时显示每个月的星期和日期列表

ios - 无法将类型 'DateComponents' 的值分配给类型 'String?' 的值

ios - swift 2.0 : Cannot convert NSDateComponents to NSCalendarUnit

iphone - 随意混搭

iphone - 游戏中心排行榜(沙盒)显示错误的分数

ios - iOS 应用程序如何知道何时下载新数据?

ios - 从 iOS 应用程序打开 Twitter 无法正常工作

swift 3 : Date vs NSDate?

swift - 从特定日期 Swift 获取更大日期单位的最简单方法