Проблема в покрытии времени по Гринвичу по местному времени

Мое текущее время устройства --- 2013-05-09 10:23

Я конвертирую его в GMT со следующим кодом

   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm a";

   NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
  [dateFormatter setTimeZone:gmt];
   NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
   NSLog(@"time in GMT ------ %@",timeStamp);

И я получил выход как

     time in GMT ------  2013-05-10 04:53 AM

Затем я нашел свой часовой пояс

  NSTimeZone *localTime = [NSTimeZone systemTimeZone];
  NSLog(@"local timezone  is------ %@",[localTime name]);

выход

  local timezone  is------ Asia/Kolkata

Теперь мне нужно преобразовать вышеуказанное время по Гринвичу в местное время. Я использовал следующий код

   NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:[localTime name]];
  [dateFormatter setTimeZone:sourceTimeZone];
   NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
   NSLog(@"local time is ------- %@",dateFromString);

Но я получаю неправильный результат..

   local time is ------- 2013-05-09 19:23:00 +0000

Почему это случилось? Я должен получить местное время как - 2013-05-09 10:23 утра

5 ответов

Решение

// получить текущую дату / время

NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *currentTime = [dateFormatter stringFromDate:today];
[dateFormatter release];
NSLog(@"User's current time in their preference format:%@",currentTime);

Ваш timestamp Строка в GMT. Это означает, что когда вы хотите преобразовать строку GMT обратно в NSDateваш форматировщик даты должен быть установлен на GMT, а не на местный часовой пояс. Делая это, вы получите правильное NSDate,

И не забывайте, что когда вы входите NSDate объект, он будет отображаться в GMT независимо от чего-либо еще.

Попробуйте использовать этот код:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm a"];

    // get time zone
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
    NSDate *date = [NSDate date];
    NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
    date = [dateFormatter dateFromString:timeStamp];

    // change time zone
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Kolkata"]];
    // or you can use SystemTimeZone
    // [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

    NSString *strDateWithLocalTimeZone = [dateFormatter stringFromDate:date];

    NSLog(@"Local Time Zone Date %@", strDateWithLocalTimeZone);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm a";

    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:gmt];
    NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
    NSLog(@"time in GMT ------ %@",timeStamp);



    NSTimeZone *localTime = [NSTimeZone systemTimeZone];
    NSLog(@"local timezone  is------ %@",[localTime name]);


    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [dateFormatter setTimeZone:sourceTimeZone];
    NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
    NSLog(@"local time is ------- %@",dateFromString);


    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    dateFormatter1.dateFormat = @"yyyy-MM-dd HH:mm";

    NSTimeZone *gmt1 = [NSTimeZone localTimeZone];
    [dateFormatter1 setTimeZone:gmt1];
    NSString *timeStamp1 = [dateFormatter1 stringFromDate:[NSDate date]];
    NSLog(@"local time is ------- %@",timeStamp1);

Выход:

time in GMT ------ 2013-05-10 05:13 AM
 local timezone  is------ Asia/Kolkata
 local time is ------- 2013-05-10 00:13:00 +0000
 local time is ------- 2013-05-10 10:43

Пожалуйста, моя дорогая, не прилагайте больших усилий в Google. Сначала найдите ваш вопрос в Google, и если вы не получили ответ в этом случае, поставьте свой вопрос в стеке. И смотрите ваш ответ по ссылке ниже....

  1. iPhone: NSDate конвертирует GMT в местное время
  2. преобразование времени iphone gmt в местное время
  3. Перевод даты / времени в местное время пользователя - выпуск
Другие вопросы по тегам