Dateはシステムエリアがモーリシャス、12時間制の場合NULL

2713 ワード

ツッコミ:ユーザーからフィードバックがあったとき、私はテスターでテストしたが、大丈夫、自分の机でテストOK、(1)新机种による问题を排除した.
その後、バックグラウンドでユーザーデータを取得し、プロジェクト上で実行し、表示することができます.(2)データのフォーマットが正しくないことを排除し、
ユーザーのデータのシミュレーションを開始し、人はモーリシャス、言語フランス語、地域モーリシャスを設定し、問題はありません(笑顔を保つ)
後で同僚が注意して、12時間制を試してみます...(はい、問題が再現されました)そこで私は長い知識を求める道を始めました(2日間^>^)
以上の結論:試験環境は地域にモーリシャスを設置し、12時間制である.
ソース(元)コード:
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, [UIScreen mainScreen].bounds.size.width/2,30)];
    label.textColor = [UIColor redColor];
    
    label.text = [self timeTransfer:@"20200427130101"];
    
    [self.view addSubview:label];
    
    NSLog(@"timeTransfer: %@",[self timeTransfer:@"20200427130101"]);

}

-(NSString *)timeTransfer:(NSString *) string{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
     [dateFormatter setDateFormat:@"yyyyMMddHHmmss"];
     
     NSDate *date = [dateFormatter dateFromString:string];
     
     [dateFormatter setDateFormat:@"dd MMM,yyyy HH:mm:ss"];    
      NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
      dateFormatter.locale = locale;

     NSString *strDate = [dateFormatter stringFromDate:date];
    
    return strDate;
}

受け取ったデータがnullであることに気づきます
 
解決方法:NSLocale*locale=[[NSLocale alloc]initWithLocaleIdentifiier:@"en_US";      dateFormatter.locale = locale;
に置く
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
の下
つまり
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, [UIScreen mainScreen].bounds.size.width/2,30)];
    label.textColor = [UIColor redColor];
    
    label.text = [self timeTransfer:@"20200427130101"];
    
    [self.view addSubview:label];
    
    NSLog(@"timeTransfer: %@",[self timeTransfer:@"20200427130101"]);

}

-(NSString *)timeTransfer:(NSString *) string{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    
      NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
      dateFormatter.locale = locale;
    
     [dateFormatter setDateFormat:@"yyyyMMddHHmmss"];
     
     NSDate *date = [dateFormatter dateFromString:string];
     
     [dateFormatter setDateFormat:@"dd MMM,yyyy HH:mm:ss"];

 
     NSString *strDate = [dateFormatter stringFromDate:date];
    
    return strDate;
}

同僚の注意と2人の同僚の助けに感謝します~~~