سؤال

وأنا واثق أنا مجرد شيء مفقود. ولكن لقد غوغليد هذا لعدة أيام في محاولة للعثور كيفية إظهار السنة 4 أرقام عند عرض أحد NSDate مع نمط من NSDateFormatterShortStyle. واسمحوا لي أن أعرف إذا كان لديك الحل. هنا هو رمز أنا أستخدم الآن.

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease ];
    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];

    // add label for birth
    UILabel *birthday = [[UILabel alloc] initWithFrame:CGRectMake(125, 10, 100, 25)];
    birthday.textAlignment = UITextAlignmentRight;
    birthday.tag = kLabelTag;
    birthday.font = [UIFont boldSystemFontOfSize:14];
    birthday.textColor = [UIColor grayColor];
    birthday.text = [dateFormatter stringFromDate:p.Birth];
هل كانت مفيدة؟

المحلول

إذا كنت بحاجة إلى أربع سنوات أرقام، تعيين dateformat: باستخدام الشكل المحدد الذي تريد. الجانب السلبي هو أن تفقد التنسيق المحلية التلقائي.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];

...

birthday.text = [dateFormatter stringFromDate:p.Birth];

إذا كنت تحتاج التعريب ثم هل يمكن أن محاولة تعديل تنسيق التاريخ من نمط قصيرة.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease ];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

if ([[dateFormatter dateFormat] rangeOfString:@"yyyy"].location == NSNotFound) { 
    NSString *fourDigitYearFormat = [[dateFormatter dateFormat] stringByReplacingOccurrencesOfString:@"yy" withString:@"yyyy"]; 
    [dateFormatter setDateFormat:fourDigitYearFormat];             
}

تحديث مع تصحيح خطأ من ماكس ماكلويد

نصائح أخرى

وفقط في حالة أن شخص ما يتعثر هنا كما فعلت 'كوس كنت بحاجة شيء من هذا القبيل مع سنة 2 أرقام في تنسيق التاريخ المترجمة وهذا هو السؤال القديم حقا، وهنا هو بلدي الحل:

NSLocale*           curLocale = [NSLocale currentLocale];
NSString*           dateFmt   = [NSDateFormatter dateFormatFromTemplate: @"ddMMyyyy"
                                                                options: 0
                                                                 locale: curLocale];
NSDateFormatter*    formatter = [[[NSDateFormatter alloc] init] autorelease];
                    [formatter setDateFormat:dateFmt];
NSString*           retText = [formatter stringFromDate:refDate];

return retText;

وربما شخص ما يمكن استخدامه في وقت ما ...

وهذا هو موضوع قديم، ولكن لأنني كنت تحاول أن تفعل ما يريد ديف وليس ولأن أيا من الإجابات كانت صحيحة، وهنا هو الحل يمكن (في حالة أي شخص تريد من أي وقت مضى هو نفس الشيء):

NSString *FormatString = [NSDateFormatter dateFormatFromTemplate:@"MM/dd/yyyy HH:mm" options:0 locale:[NSLocale currentLocale]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:FormatString];
//Parse date here with the formater (like [formatter stringFromDate:date])
[formatter release];
<اقتباس فقرة>   

وkCFDateFormatterShortStyle   يحدد نمط قصيرة، عادة رقمية فقط، مثل "11/23/37" أو "03:30".

     

ومتوفر في ماك OS X v10.3 في وقت لاحق.

     

وأعلن في CFDateFormatter.h.

المصدر

لا تظهر NSDateFormatterShortStyle لتعطيك 4 سنوات أرقام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top