【发布时间】:2015-07-16 17:18:09
【问题描述】:
我必须找到每个月 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 种)才能使其正常工作.
提前谢谢你。
【问题讨论】:
-
这段代码,以及你产生的问题,没有意义。你想得到什么结果?如果它是本地化字符串,您已经从
NSDateFormatter获得它。如果是工作日数字,那么您根本不应该涉及格式化程序:在构造初始日期后从日历中获取该日期组件。 -
嗨乔希...我没有看到任何日期组件可以给我当月的第一天;工作日组件只会给我过去日期的天数。我需要获取每个月第一天的天数来构建日历。正如我所指出的,它适用于英语国家,但没有本地化。
-
构建日期后,使用日期组件和日历,您可以从日历中获取该日期的任何日期组件。如果你想要那个日期的工作日部分,你可以得到它。
-
我得到了它的工作......再次感谢乔希......我很感激......
标签: objective-c ios8 nsdateformatter nscalendar nslocalizedstring