在我的项目中。我想在我的项目中更改用户日历。如果用户选择日语日历,则日期在我的项目中以日历格式显示。如果用户选择Gregorian,则日期显示为Gregorian Calendar格式。所以我使用了如下的类文件。
这是 myclass.h
#import <Foundation/Foundation.h>
@interface util : NSObject
+ (NSString *)getTrimedString:(NSString *)str;
+(NSDate*)convertStringToDate:(NSString*)baseString;
+(NSString*)dateToYMD:(NSDate*)date;
+(NSString*)dateToMDHM:(NSDate*)date;
+(NSString*)dateToYMDHM:(NSDate*)date;
+(NSString*)dateToHM:(NSDate*)date;
+(NSString*)convertStringToMDHM:(NSString*)baseString;
+(UILabel*)createWorkLblWord:(NSString*)baseText;
+(UILabel*)createWorkLblWord:(NSString*)baseText widths:(NSInteger)width fontSize:(NSInteger)size;
+(float)systemVersionFloat;
@end
+(NSString*)dateToYMDHM:(NSDate*)date{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
这是 myclass.m
#import "util.h"
@implementation util
+(NSString*)dateToYMDHM:(NSDate*)date{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSCalendar *usercalendar = [NSCalendar currentCalendar];
[formatter setCalendar:usercalendar];
NSLog(@"Current Auto Calendar : %@",[[NSCalendar autoupdatingCurrentCalendar] calendarIdentifier]);
NSLog(@"current calendar: %@", [[NSCalendar currentCalendar] calendarIdentifier]);
[formatter setDateFormat:@"yyyy/MM/dd\nH:mm"];
return [formatter stringFromDate:date];
}
但结果只显示格里高利历日历格式。即使用户选择日历或佛教日历,我的项目也只显示格里高利历日历格式日期。我该如何解决这个问题?
答案 0 :(得分:1)
我的问题的解决答案不是编码错误。它在Scheme Options中错了。我在Xcode产品菜单中将我的应用程序区域更改为系统区域&gt;&gt;方案&gt;&gt;编辑方案&gt;&gt;选项标签。 Mr.Andrew Romanov救了我。非常感谢Mr.Andrw Romanov
这是我的方案选项截图。
答案 1 :(得分:0)
而不是使用[NSCalendar currentCalendar]
尝试使用标识符,当前日历选择默认值
为格里高利安
[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
佛教徒 `[[NSCalendar alloc] initWithCalendarIdentifier:NSBuddhistCalendar];
答案 2 :(得分:0)
currentCalendar它是当前区域设置的日历,用户可以在手机的设置中进行更改。
如果要允许用户更改应用程序中的日历。您应该使用calendarWithIdentifier方法创建所需的日历
您还可以订阅NSCurrentLocaleDidChangeNotification,并更新用户界面。
此处的所有代码:
@interface ViewController ()
- (IBAction)printCurrentCalendar:(id)sender;
- (void)localeChangedNotification:(NSNotification*)notification;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localeChangedNotification:) name:NSCurrentLocaleDidChangeNotification object:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark Actions
- (IBAction)printCurrentCalendar:(id)sender
{
NSCalendar* calendar = [NSCalendar currentCalendar];
NSLog(@"calendar from currentCalendar: %@", calendar.calendarIdentifier);
NSCalendar* localeCalendar = [NSCalendar calendarWithIdentifier:[NSLocale currentLocale].calendarIdentifier];
NSLog(@"calendar from locale: %@", localeCalendar.calendarIdentifier);
}
- (void)localeChangedNotification:(NSNotification*)notification
{
NSLog(@"locale changed");
}
@end
输出:
CalendarCheck [1289:74644]来自currentCalendar的日历:格里高利 CalendarCheck [1289:74644]来自语言环境的日历:gregorian
CalendarCheck [1289:74644]区域设置已更改
CalendarCheck [1289:74644]来自currentCalendar的日历:japanese CalendarCheck [1289:74644]来自locale的日历:japanese