编辑开始
好的,显然我没有说清楚。
我需要一周中的“一周的第一天”双向映射。因此,尽管用户可能会更改他/她的区域设置/区域设置,但仍可以使用存储的日期编号来识别“正确”的日期。
我知道NSDateFormatter
和NSCalendar
的{{1}}方法。 但是我找不到返回数组的索引与API / Apple文档中weekdaySymbols
'NSDateComponents
属性中找到的值之间的任何记录直接关系。是的,有很多帖子(这里和其他地方)像weekday
(甚至[NSCalendar weekdaySymbols][dateComps.weekday - 1]
)一样。但是,除了我将日期ID映射回实际[NSCalendar weekdaySymbols][dateComps.weekday]
的工作日(请参阅原始帖子的第二个代码段)之外,我更愿意确保在将项目交给客户之前确定
我遇到的第一个代码段(在我的原始帖子中发布)遇到的问题是NSDateComponents
的{{1}}不尊重传递的NSCalendar
属性dateFromComponents:
实例。
编辑结束
您好我正在尝试为日期(如“星期日”)映射构建一个日期编号(如星期日1)。这样我就可以向用户显示日期列表(周一至周日或周日至周一或用户日历偏好之后的任何日期)。需要映射,以便我可以存储用户以独立于本地化的方式选择的天数。
我知道weekday
或NSDateComponents
的{{1}}。但据我所知,这些只是列表,与用户的偏好(就第一天的星期几而言)或 dayOfWeek 有关(可能由NSDateFormatter
返回实例),我不知道如何使用它们。
我尝试了几种方法....但总有一些东西会破坏它。
例如,以下版本从 Monday 开始,作为分配给NSCalendar
的第一个值。但是进一步的迭代似乎并没有对日期产生影响。所以我得到了7个 Monday 字符串的列表。
weekdaySymbols
简而言之,我有以下要求:
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
它可能与时区“东西”有关系,但由于我从未设置(或删除)时区,我无法看到如何/在哪里。
答案 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];