- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在两个不同的日期上使用 [[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/
为什么 init 不能在 NSCalendar *cal = [[NSCalendar alloc] init] 中使用,因为 init 是每个类的实例方法有吗? 最佳答案 NSCalendar 必须
我正在尝试创建 NSCalendar 的子类,但运气不佳。我尝试了两种方法: 彻底的类别。我可以创建一个修改后的对象,并且我添加的测试方法(不是 NSCalendar 的一部分)工作得很好,但重写的方
我正在尝试创建一个日/月 UIPickerView,没有年份。目标是选择一天/月份来列出当天/月份发生的历史事件。 [NSCalendar currentCalendar]maximumRangeOf
在 Mac OS X 上,如果您转到系统首选项 > 日期和时间 > 打开语言和文本 > 在顶部单击格式 >,然后在日历下拉列表中出现一个科普特日历选项。如何在 Mac 应用程序中显示此日历? 最佳答案
有谁知道是否有办法在 NSCalendar 上设置一周的第一天,或者是否有一个日历已经将星期一而不是星期日作为一周的第一天。我目前正在开发一个基于一周工作量的应用程序,它需要从周一开始,而不是周日。我
是否可以根据位置获取firstWeekday。例如,在美国应该说星期天。在俄罗斯应该说星期一。 编辑:[[NSCalendar currentCalendar] firstWeekday]总是说1,但
我正在开发一个项目,我想在我的应用程序中集成 NSCalendar 功能。因此我用谷歌搜索,发现this 解决方案。它给了我一年中的所有月份,我也可以选择特定的日期。没关系。但我想禁用每个月的所有星期
这个问题在这里已经有了答案: Getting date from [NSDate date] off by a few hours (3 个答案) NSLog showing the previo
我使用下面的代码使用随机日期计算前一个星期一。哪个工作文件,但我的代码在明年日期中断。下面是相同的代码: NSDate *date = [NSDate dateWithTimeIntervalSinc
假设以下内容适用于所有设备是否安全? let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 我不是应用程序本
我正在尝试从日期中获取周数。有人能告诉我为什么无论我输入什么日期都只返回 0 吗: let currentWeekNumber = NSCalendar.currentCalendar().compo
我有一个函数,它根据月份和年份返回周数数组。 代码如下: let calendar = NSCalendar.currentCalendar() let weekRange = calendar.ra
我正在创建各种日历控件... 我需要知道的一件事是一个月有多少周...... 所以 NSCalendar rangeOfUnit:inUnit:forDate 似乎正是我需要的... 除了我注意到一些
我正在尝试在两个不同的日期上使用 [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalend
我正在 viewDidLoad 中初始化 NSCalendar,如下所示: gregorian = [NSCalendar currentCalendar]; 日历在相应的 .h 文件中声明,如下所示
我希望能够在 iPhone 上使用 NSCalendar 在公历和儒略历(注意:不是“儒略日期”)之间进行转换。如何子类化 NSCalendar 以使用儒略历?我想这样做,而不考虑 1582 年或 1
我有一个方法的子集,需要获取当月的第一天。 NSDate *today = [NSDate date]; // returns correctly 28 february 2013 NSCalend
我很难理解 dateByAddingComponents 如何处理夏令时的异常。我已阅读 Apple 日期和时间编程指南,并期望 dateByAddingComponents 考虑 DST 更改。但是
在 Swift3 之前,在我的项目中我使用了这个函数: var components = (calendar as NSCalendar).components([.year, .monthSymbo
我刚刚查看了 NSCalendar.h 中的代码,如下所示: enum { NSEraCalendarUnit = kCFCalendarUnitEra, NSYearCalendar
我是一名优秀的程序员,十分优秀!