2015-04-20 7 views
1

При создании новой UILocalNotification и планировании уведомления время изменяется из-за часового пояса. I дата, которую я установил, меняет UiLocalNotifcation на часовой пояс. которые я не хочу, чтобы это произошлоUILocalNotification Неправильный часовой пояс

public static void RegisterLocalNotification(ServiceModel.Types.ParkingTicket parkingTicket) 
    { 

     if (parkingTicket == null || parkingTicket.ExpiringSoon) return; 

     var startDate = parkingTicket.UtcStart.ToLocalTime(); 

     NSDate nsStartDate = startDate.AddMinutes(parkingTicket.Duration - 10).UtcDateTimeToNSDate(); 

     var notification = new UILocalNotification 
     { 
      FireDate = nsStartDate, 
      TimeZone = null, 
      AlertAction = Resources.Strings.ExtendTicket, 
      AlertBody = string.Format 
      (Resources.Strings.FormattedExpiringMessage, 
      parkingTicket.TimeLeft.Description(false), 
      parkingTicket.Address,parkingTicket.Car.RegistrationNumber), 
      RepeatInterval = 0, 
      HasAction = true, 
      UserInfo = GetDictionaryFromParkingTicket(parkingTicket), 
      SoundName = UILocalNotification.DefaultSoundName, 
      ApplicationIconBadgeNumber = 1 
     }; 

     UIApplication.SharedApplication.ScheduleLocalNotification(notification); 
    } 

     public static NSDate UtcDateTimeToNSDate(this DateTime utcDateTime) 
    { 
     var reference = new DateTime(2001, 1, 1, 0, 0, 0); 
     return NSDate.FromTimeIntervalSinceReferenceDate((utcDateTime - reference).TotalSeconds); 
    } 

Я попытался с помощью TimeZone = NSTimeZone.LocalTimeZone.

ответ

2

Вы преобразования даты в формате UTC к локальной дате:

var startDate = parkingTicket.UtcStart.ToLocalTime(); 

тогда вы лечения местной даты в качестве даты UTC, тем самым делая преобразование дважды:

NSDate nsStartDate = startDate.AddMinutes(parkingTicket.Duration - 10).UtcDateTimeToNSDate(); 

Просто сделайте это вместо этого:

var startDate = parkingTicket.UtcStart; 
var nsStartDate = (NSDate) startDate.AddMinutes (parkingTicket.Duration - 10); 

Явное преобразование NSDate будет правильным.

+0

спасибо, глупая ошибка. глядя на него слишком долго. работает прелесть. Я не знаю, почему я думал, что мне нужен метод расширения для преобразования :-) – InitLipton

Смежные вопросы