2013-11-19 4 views
2

Я получаю с моего сервера дату как строку "10/4/2013 10:00:00 PM". Теперь я хочу, чтобы на моем ярлыке показывались только часы. Но проблема в том, что я использую приведенный ниже код, но не получаю фактическое время.Преобразование даты из строки в iOS?

-(NSString*)convert:(NSString*)strdate 
{ 

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [formatter setLocale:[NSLocale systemLocale]]; 
    [formatter setDateFormat:@"dd/MM/yyyy HH:mm:ss a"]; 
    NSDate * date = [formatter dateFromString:strdate]; 


    NSDateFormatter* df = [[NSDateFormatter alloc]init]; 
    [df setDateFormat:@"hh:mm"]; 
    NSString *depResult = [df stringFromDate:date]; 

    NSLog(@"hours %@ ", [df stringFromDate:date]); 

    return depResult; 
} 

и даю входной строки, как "10/4/2013 9:00:00 PM" и получение продукции как "5:30" .Please поправьте меня, где я делаю wrong.Thanks

+2

Вы находитесь в Индии, я подозреваю. Какова разница во времени в Индии? –

+0

Для india +0530 –

+1

Пожалуйста, не используйте фиксированные форматы дат, используйте ['NSDateFormatterStyle'] (https://developer.apple.com/library/iOS/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference .html # // apple_ref/c/tdef/NSDateFormatterStyle) – rckoenes

ответ

2

Если у вас есть эта дата "10/4/2013 9:00:00 pm" с сервера,

и вы хотите, то же самое, что в Индии время, если требуемый выход 02:24 AM

Тогда вам нужно сделать что-то подобное.

-(NSString*)convert:(NSString*)strdate 
{ 

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [formatter setLocale:[NSLocale systemLocale]]; 
    [formatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 
    NSDate * date = [formatter dateFromString:strdate]; 


    NSDateFormatter* df = [[NSDateFormatter alloc]init]; 
    [df setDateFormat:@"hh:mm a"]; 
    NSString *depResult = [df stringFromDate:date]; 

    NSLog(@"hours %@ ", [df stringFromDate:date]); 

    return depResult; 
} 
+0

hi @Anoop Vaidya его не только для Индии, я хочу его для универсального, может ли помочь мне? И спасибо за ваш ответ – krishh

+0

это будет работать в любой стране, а ваш язык будет 'systemlocale' ... вам нужно устранить timeZoneForSec. .. до 0. –

2

Используйте следующий код:

- (NSString *)convert:(NSString *)strdate 
{ 
    NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
    [formatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 
    NSDate * date = [formatter dateFromString:strdate]; 


    NSDateFormatter * df = [[NSDateFormatter alloc] init]; 
    [df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
    [formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
    [df setDateFormat:@"hh:mm"]; 
    NSString * depResult = [df stringFromDate:date]; 

    NSLog(@"hours %@ ", [df stringFromDate:date]); 

    return depResult; 
} 
+0

Я думаю, 'en_US_POSIX' не требуется. –

+0

Это не так, но рекомендуется использовать фиксированный язык, когда вы работаете с датами фиксированного формата. '' ru_US_POSIX'' является лучшим выбором для выбора. – Vytautas

+0

Что относительно systemLocale? –

10
+(NSString *)getDateStringFromDate :(NSDate *)date { 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 
    NSString *dateString = [dateFormatter stringFromDate:date]; 
    return dateString; 
} 

+(NSDate *)getDateFromDateString :(NSString *)dateString { 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"]; 
    NSDate *date = [dateFormatter dateFromString:dateString]; 
    return date; 
} 
Смежные вопросы