0

私のアプリでは、いくつかのイベントのローカル通知を設定しています。ただし、NSDateFormatter日付と時刻を正しくフォーマットしません。日付をフォーマットすると、3時間早くなります。同様に、 を使用して現在時刻を取得すると、NSDate()UTC として 3 時間早くなります。アプリの別のイベントで同じ問題に直面しましたが、追加することで解決できましたdateFormatter.timeZone = NSTimeZone(name: "GMT")。現在の問題は、以下のコードに関連しています。

var dateFormatter1 = NSDateFormatter()
var dateFormatter2 = NSDateFormatter()
dateFormatter1.dateFormat = "yyyy-MM-dd"
dateFormatter2.dateFormat = "yyyy-MM-dd HH:mm"

let mainItemList: Array<BagItem> = self.GetMainItemsInfoInBag()
for(item) in mainItemList
{
    let dateString = dateFormatter1.stringFromDate(item.date) + " " + item.time
    // Send servey notification 
    let serveyNotificationTime = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitHour, value: Int((120 + item.itemService.duration) / 60), toDate: dateFormatter2.dateFromString(dateString)!, options: NSCalendarOptions.WrapComponents)

    self.SetUpLocalNotification(serveyNotificationTime, message: "Do you want to join to the servey?": true)

    // if time for now is earlier than reservation time - 1 based on hour, set reminder notification.
    if(NSDate().dateByAddingTimeInterval(3*60*60).compare(NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitHour, value: -1, toDate: dateFormatter2.dateFromString(dateString)!, options: NSCalendarOptions.WrapComponents)!) == NSComparisonResult.OrderedAscending)
    {
         let reminderNotificationTime = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitHour, value: -1, toDate: dateFormatter2.dateFromString(dateString)!, options: NSCalendarOptions.WrapComponents)
         self.SetUpLocalNotification(reminderNotificationTime, message: message, withCategory: false)
    }
}

// Set Up Local Notifications
private func SetUpLocalNotification(notificationTime: NSDate!, message: String!, withCategory: Bool!)
{
    var app: UIApplication = UIApplication.sharedApplication()
    var notifyAlarm: UILocalNotification! = UILocalNotification()
    if(notifyAlarm != nil)
    {
        notifyAlarm.fireDate  = notificationTime
        notifyAlarm.timeZone  = NSTimeZone.defaultTimeZone()
        if(withCategory == true)
        {
            notifyAlarm.category  = "FIRST_CATEGORY"
        }
        notifyAlarm.soundName = UILocalNotificationDefaultSoundName
        notifyAlarm.alertBody = message
        app.scheduleLocalNotification(notifyAlarm)
    }
}

上記のコードでは、ローカル通知を「リマインダー」および「サーバーに参加」として設定しようとしています。ただし、ローカル通知時間を正しく設定できません。

回答ありがとうございます

よろしくお願いします

4

1 に答える 1

0

timeZone を設定した後、fireDate を設定するだけです。

notifyAlarm.timeZone = NSTimeZone.localTimeZone()
notifyAlarm.fireDate = notificationTime

また、ブール値の var を true と比較しないでください。冗長です

if withCategory { 
    notifyAlarm.category  = "FIRST_CATEGORY"
}

コードから .dateByAddingTimeInterval(3*60*60) も削除する必要があります。

于 2015-04-13T08:40:31.853 に答える