在我的项目里。我希望在我的项目中用户更改日历。如果用户选择日文日历,则在我的项目中用日文日历格式显示日期。如果用户选择Gregorian,则日期显示为Gregorian格式。所以我使用了下面的类文件。
这是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];
}但是结果只是显示Gregorian日期格式。即使用户选择日本日历或佛教日历,我的项目只显示公历格式日期。我怎么才能解决这个问题?

发布于 2016-11-15 09:34:32
解决我的问题的答案不是编码错误。在计划选项中这是错误的。我在Xcode产品菜单中将我的应用程序区域更改为系统区域,>>方案、>>编辑方案、>>选项卡。Mr.Andrew Romanov救了我。非常感谢Mr.Andrw Romanov
这是我的“计划选项截图”。

发布于 2016-11-15 07:20:30
当前日历选择默认的日历,而不是使用[NSCalendar currentCalendar]尝试使用标识符
格里高利[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
佛教徒`[NSCalendar allocinitWithCalendarIdentifier: NSBuddhistCalendar];
发布于 2016-11-15 07:23:19
currentCalendar它是来自当前地区的日历,用户可以在手机的设置中进行更改。
如果要允许用户更改应用程序中的日历,请执行以下操作。您应该使用calendarWithIdentifier方法创建所需的日历。
您还可以订阅NSCurrentLocaleDidChangeNotification,并更新UI。
这里的所有代码:
@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产出:
currentCalendar的日历1289:74644:格雷戈里安的日历1289:74644 宪兵队检查1289:74644地区更改 日历1289:74644来自currentCalendar的日历:日本宪兵队1289:74644
https://stackoverflow.com/questions/40603859
复制相似问题