gpt4 book ai didi

iphone - NSCalendar 日差错误

转载 作者:太空狗 更新时间:2023-10-30 03:37:10 28 4
gpt4 key购买 nike

我正在尝试在两个不同的日期上使用 [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date] 来查看它们是否落在同一天。但是,如果我的时区不同(比如,在德国的某个地方),即使日期明显相同,返回的天数也不同。如果我在同一日期使用 NSYearCalendarUnit 而不是 NSEraCalendarUnit,返回的值是相同的。

使用 NSYearCalendarUnit 的唯一问题是它为不同年份的同一天返回相同的值,如果两个日期属于不同年份,则确定两个日期之间的天数并不简单。

有什么问题吗?或者如何更轻松地确定两个日期是否在同一天,或者如何确定它们之间的天数?

例子:

[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Berlin"]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *date1 = [NSDate dateWithTimeIntervalSinceReferenceDate:300751200];
NSDate *date2 = [NSDate dateWithTimeIntervalSinceReferenceDate:300836062.388569];

NSLog(@"\nDate 1: %@\nDate 2: %@",date1,date2);
/*Output:
Date 1: 2010-07-14 00:00:00 +0200
Date 2: 2010-07-14 23:34:22 +0200
*/

int day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date1];
int day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
forDate:date2];

NSLog(@"\nDay 1: %i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 733966
Day 2: 733967
*/

day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date1];
day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
forDate:date2];

NSLog(@"\nDay 1:%i\nDay 2: %i",day1,day2);
/*Output:
Day 1: 195
Day 2: 195
*/

最佳答案

提交了一个错误,但后来我检查了 Date and Time Programming Guide再次。如果您使用 list 13 中的代码(类似于您的代码),它的行为是错误的。但是如果您使用 list 14,它会按预期工作。

编辑:从概念上讲,Apple 是对的。耶稣基督(和其他人一样)出生在绝对时间,独立于时区。因此,新时代在同一时间点开始,与时区无关。新年在每个时区的不同时间点。这可以解释 NSYearCalendarUnit 和 NSEraCalendarUnit 之间的差异。问题是,他们没有在文档中明确说明这一点。

关于iphone - NSCalendar 日差错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250968/

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