Objective-C:创建周日数来命名映射

时间:2015-08-31 18:59:48

标签: ios objective-c nscalendar nsdatecomponents

编辑开始

好的,显然我没有说清楚。

  1. 我需要一周中的“一周的第一天”双向映射。因此,尽管用户可能会更改他/她的区域设置/区域设置,但仍可以使用存储的日期编号来识别“正确”的日期。

  2. 我知道NSDateFormatterNSCalendar的{​​{1}}方法。 但是我找不到返回数组的索引与API / Apple文档中weekdaySymbols'NSDateComponents属性中找到的值之间的任何记录直接关系。是的,有很多帖子(这里和其他地方)像weekday(甚至[NSCalendar weekdaySymbols][dateComps.weekday - 1])一样。但是,除了我将日期ID映射回实际[NSCalendar weekdaySymbols][dateComps.weekday]的工作日(请参阅原始帖子的第二个代码段)之外,我更愿意确保在将项目交给客户之前确定

  3. 我遇到的第一个代码段(在我的原始帖子中发布)遇到的问题是NSDateComponents的{​​{1}}不尊重传递的NSCalendar属性dateFromComponents:实例。

  4. 编辑结束

    您好我正在尝试为日期(如“星期日”)映射构建一个日期编号(如星期日1)。这样我就可以向用户显示日期列表(周一至周日或周日至周一或用户日历偏好之后的任何日期)。需要映射,以便我可以存储用户以独立于本地化的方式选择的天数。

    我知道weekdayNSDateComponents的{​​{1}}。但据我所知,这些只是列表,与用户的偏好(就第一天的星期几而言)或 dayOfWeek 有关(可能由NSDateFormatter返回实例),我不知道如何使用它们。

    我尝试了几种方法....但总有一些东西会破坏它。 例如,以下版本从 Monday 开始,作为分配给NSCalendar的第一个值。但是进一步的迭代似乎并没有对日期产生影响。所以我得到了7个 Monday 字符串的列表。

    weekdaySymbols

    简而言之,我有以下要求:

    • 用户日历相关的演示文稿(一周的开始/结束)
    • 保存用户以非本地化方式选择的日期(作为 day-ID 的种类)
    • 如果“匹配”之前用户选择的一天,请检查日期。
    我真的错过了一些东西。但我似乎无法找到缺失的部分。 在我仅使用NSDateComponent并将dayName添加到元素索引之前,将 day-ID 映射到名称。但是接下来的代码如下: {2}的值为 NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:7]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *dateComps = [[NSDateComponents alloc] init]; NSDate *date = nil; NSString *dayName = nil;; NSDictionary *idToNameDict = nil; NSInteger weekday = [cal firstWeekday]; for (NSInteger i = 0; i < 7; i++) { dateComps.weekday = weekday; date = [cal dateFromComponents:dateComps]; dayName = [dateFormatter stringFromDate:date]; idToNameDict = [NSDictionary dictionaryWithObject:dayName forKey:@( dateComps.weekday )]; [tempArray addObject:idToNameDict]; weekday++; if (weekday > 7) { weekday = 1; } } 的{​​{1}},而星期二的列表则与weekdaySymbols相关联。

    1

    它可能与时区“东西”有关系,但由于我从未设置(或删除)时区,我无法看到如何/在哪里。

1 个答案:

答案 0 :(得分:1)

注意:

  

使用的时区是创建数据时的用户   星期天== 1

日期的工作日编号:

NSDate *date = [NSDate date];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [calendar components:NSWeekdayCalendarUnit fromDate:date];
NSInteger weekdayNumber = dateComponents.weekday;

日期的日期名称:

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"EEEE";
NSString *dayName = [dateFormatter stringFromDate:date];

来自数字的周名称:

NSArray *weekDayNames = [[NSDateFormatter new] weekdaySymbols];
NSString *weekDayName = weekDayNames[2];