ios - 从 NSDateComponents 创建 NSDate 关闭一天

标签 ios nsdate nsdatecomponents

我正在尝试为单元测试设置一个特定的日期:

NSCalendar *calendar = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setCalendar:calendar];
[components setYear:2011];
[components setMonth:5];
[components setDay:12];
[components setHour:1];
[components setMinute:0];
[components setSecond:0];

NSDate *date = [calendar dateFromComponents:components];
NSLog(@"Date I tried to set: %@", date);

但是,这会打印出“我尝试设置的日期:2011-05-11 17:00:00 +0000”。日期似乎晚了一天,我不知道为什么打印出来的时间是 17:00:00。 这是为什么?

最佳答案

NSDate 没有任何与之关联的时区数据。它实际上距离“格林威治标准时间 2001 年 1 月 1 日的第一刻”只有几秒钟。因此,日期组件和日历正在使用您本地的时区创建一个 NSDate。 NSDate 是从格林威治标准时间 1/1/2001 00:00 开始的正确秒数,但是当您记录它时,它显示的是格林威治标准时间而不是本地时区的日期。如果您将记录的时间调整为您的时区,它将是 2011-05-12 01:00:00。

关于ios - 从 NSDateComponents 创建 NSDate 关闭一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318249/

相关文章:

html - ion-col 中的嵌套 div,100% 高度在 IOS 中不起作用

ios - 更新 Parse.com 中的 createdAt 列

ios - 从 NSDate 获取每分钟的小时数

ios - 处理日光时差

ios - 在 UICollectionView 的每个边缘周围放置边距

ios - 设置循环通知某天

swift - 无法将类型 'AnyObject' 的返回表达式转换为返回类型 'NSComparisonResult'

ios - 某些日期的 NSDate 格式不是有效日期

ios - If 语句未运行 - iOS

ios - NSDateComponents(通过 MTDates)返回一个奇怪的小时数(mt_hourOfDay)