2016-08-29 6 views
0

Я написал функцию для получения строки времени UTC, соответствующей любой строке времени, переданной в качестве аргумента функции.Получение времени UTC в любое время и обработка летнего времени, а также

+(NSString *)getUTCTime:(NSString *)selectedTime 
{ 
    NSString *strFormat; 
    if ([self is24HourFormat:selectedTime]){ 
     strFormat = @"HH:mm"; 
    } 
    else{ 
     strFormat = @"hh:mm a"; 
    } 
    NSLocale *baseLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 

    NSDateFormatter *dateFormatterlocal = [[NSDateFormatter alloc] init]; 
    [dateFormatterlocal setTimeZone:[NSTimeZone systemTimeZone]]; 
    dateFormatterlocal.locale = baseLocale; 
    [dateFormatterlocal setDateFormat:strFormat]; 

    NSDate *selectedDate = [dateFormatterlocal dateFromString:selectedTime]; 

    NSDateFormatter *dateFormatterUTC = [[NSDateFormatter alloc] init]; 
    [dateFormatterUTC setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
    dateFormatterUTC.locale = baseLocale; 
    [dateFormatterUTC setDateFormat:strFormat]; 


    NSString *utcTimeString = [dateFormatterUTC stringFromDate:selectedDate]; 
    return utcTimeString; 
} 

Это работает отлично для Мумбаи, Индия часовой пояс. Но если я изменю часовой пояс на Лондон, он возвращает меня в то же время, когда я передаю аргумент функции. В настоящее время это UTC + 1 в Лондоне. Делает NSDateFormatter ручкой летнего времени?

+0

В чем же необходимость? вам нужно время в utc формате? – Lion

+0

Мне нужно отправить время UTC, соответствующее выбранному времени от пользователя к серверу. –

+0

По определению UTC не имеет часового пояса. Думаю, вы имели в виду GMT + 1. – Avi

ответ

1

Вы можете использовать NSTimeZone методы, как показано ниже на летнее: См NSTimeZone Class Reference

  1. isDaylightSavingTimeForDate: // покажет вам, если экономия дневного света существуют для этой даты
  2. daylightSavingTimeOffset// сообщит вам, сколько смещений - это время для летнего времени.

Используйте приведенный ниже код, он правильно возвращает дневное свечение со смещением

var timeZone:NSTimeZone = NSTimeZone(name:"Europe/London")! 
print(timeZone.daylightSavingTime) //this will return true if day light saving present 
print(timeZone.daylightSavingTimeOffset/(60*60))//this will give you number of hours by which the day light saving offset should be 
print("timezone: \(timeZone)")//will give you detail about timezone 
+0

Для часовой пояс Лондона возвращается 0.000. Но сейчас UTC + 1 в Лондоне. –

+0

@VarunMehta Я обновил ** комментарий ** и протестировал на детской площадке, он отлично работает и дает мне 1 смещение для Европы/Лондона. проверьте выше код и все самое лучшее. –