如何确定本地化的第一天?

时间:2015-07-16 17:18:09

标签: objective-c ios8 nsdateformatter nscalendar nslocalizedstring

我必须找到 day ,每个月的第1天才能创建自定义日历;例如,2015年9月1日是星期二,这是星期二的第一天。

我有这个代码适用于英语语言国家,但对于其他国家/地区,它失败了,因为它无法正确翻译。

    //  build date as start of month
monthDateComponents.year = components.year;
monthDateComponents.month = components.month;
monthDateComponents.day = 1;

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *builtDate =[gregorian dateFromComponents: monthDateComponents];

NSDateFormatter *df = [NSDateFormatter new];
[df setDateFormat:@"E"];    
NSString *firstDay = [df stringFromDate:builtDate];

//  now, convert firstDay to the numeric day number
if([firstDay isEqual:NSLocalizedString(@"Sun",nil)])
    return 7;
else if([firstDay isEqual:NSLocalizedString(@"Mon",nil)])
    return 1;
else if([firstDay isEqual:NSLocalizedString(@"Tue",nil)])
    return 2;
else if([firstDay isEqual:NSLocalizedString(@"Wed",nil)])
    return 3;
else if([firstDay isEqual:NSLocalizedString(@"Thu",nil)])
    return 4;
else if([firstDay isEqual:NSLocalizedString(@"Fri",nil)])
    return 5;
else if([firstDay isEqual:NSLocalizedString(@"Sat",nil)])
    return 6;

有没有更好的方法这样做,所以我不必经过每个国家,找到每天3字符缩写是什么? (例如,在法语中,星期六的日缩写返回“sam。”。)我现在编码的方式,我需要知道我的应用程序本地化的每种语言(其中10个)使其正常工作

提前谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个,它使用NSCalendar的智能日历计算。

  NSDateComponents *components = [NSDateComponents new];
  components.day = 1;
  NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

  NSDate *firstDayOfMonth = [gregorian nextDateAfterDate:builtDate matchingComponents:components options: NSCalendarMatchNextTime | NSCalendarSearchBackwards];
  NSInteger weekdayIndex = [gregorian component:NSCalendarUnitWeekday fromDate:firstDayOfMonth];
  NSLog(@"weekday number: %ld", weekdayIndex);
  return weekdayIndex;

答案 1 :(得分:1)

你想要这个:

return [gregorian component:NSCalendarUnitWeekday fromDate:builtDate];

这会给你一个整数,告诉你该日期的工作日。 1是星期天。