【发布时间】:2013-05-17 14:58:00
【问题描述】:
我正在尝试创建一个时间设置为上午 12:00:01 的日期。秒和分钟正确设置为它们的值,但小时值总是变为我设置的值,+ 4。为什么是 4?这个值有什么特别之处?分钟和秒值设置为我想要的正确值,但似乎小时值只是添加而不是替换。
这里是代码,
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
[components setHour:0];
[components setMinute:0];
[components setSecond:1];
NSDate *compareTime = [calendar dateFromComponents:components];
NSLog(@"compareTime: %@", compareTime);
NSLog(@"currentTime: %@", now);
输出是:
比较时间:2013-05-17 04:00:01 +0000
当前时间:2013-05-17 15:00:37 +0000
【问题讨论】:
-
这可能是您的本地时间和 UTC 之间的差异。你在哪个时区?
-
我在美国东部时间。但为什么会有所作为呢?无论时区如何,0 都应为 0。它实际上是在尝试自动调整吗?如果是这样,我需要做什么才能解决这个问题?
-
默认情况下,[NSDate date] 会为您提供原始日期,并且不假定本地时区。
-
我知道它给了我一个原始日期,但如果我将小时硬编码为 0,为什么它不为零?
-
令人惊讶的是,许多开发人员不了解时间和时区。时间就是时间;它是一种测量。时区告诉如何格式化时间。美国东部标准时间下午 4:00 与太平洋标准时间下午 4:00 不同。
标签: iphone ios objective-c