gpt4 book ai didi

objective-c - NSDate 计算夏令时

转载 作者:行者123 更新时间:2023-12-03 17:40:00 30 4
gpt4 key购买 nike

我有一个时间戳 (NSDate),我想验证另一个时间戳是否发生在同一日历周、月、年、日等内。

我尝试通过定义另外 2 个 NSDate 来做到这一点,一个作为开始日期,一个作为结束日期。然后用这两个日期代表所需的时间跨度。

定义当天开始的示例:

NSDate *myDate = [[NSDate alloc] init];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(
NSEraCalendarUnit |
NSMonthCalendarUnit |
NSYearCalendarUnit |
NSDayCalendarUnit |
NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit |
NSTimeZoneCalendarUnit
) fromDate:myDate];

[components setHour:1];
[components setMinute:0];
[components setSecond:0];
startDate = [cal dateFromComponents:components];

这应该将 startDate 设置为当前日期的时间 ​​00:00:00。问题是,这仅在 myDate 有当前时区的情况下才有效。例如。如果我们现在是冬令时,而 NSDate 是夏令时,它会将时间设置错误 1 ​​小时。

在此计算中如何考虑夏季/冬季时间,或者是否有更好的方法来表示时间戳所在的基于日历的时间跨度的具体时间跨度?

最佳答案

获取给定日期的日/周/月/...时间跨度的最简单方法是rangeOfUnit 方法。例如:

NSDate *date1, *date2;

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startOfTimespan;
NSTimeInterval lengthOfTimespan;
[calendar rangeOfUnit:NSWeekOfYearCalendarUnit
startDate:&startOfTimespan
interval:&lengthOfTimespan
forDate:date1];

现在 startOfTimespan 是包含 date1 的一周的开始,lengthOfTimespan 是该周的长度。所以你可以测试 date2

NSTimeInterval diff = [date2 timeIntervalSinceDate:startOfTimespan];
if ( diff >= 0 && diff < lengthOfTimespan) {
// date1 and date2 are in the same week
}

关于objective-c - NSDate 计算夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19930045/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com