在Parse后端保存日期和时间

NS1*_*518 5 ios parse-platform swift

我搜索了Parse博客,看看我是否可以得到解决方案,但没有得到任何满意的答案.所以我虽然我会在这里明确提出所有细节的问题,所以其他任何陷入类似情况的人都会觉得很容易上班.

需要:我有一个出发和返回文本字段,使用单个UIDatePicker更新.我想在Parse.com数据库中保存选定的日期.我可以查询和过滤数据.我还想在可能的情况下将本地时区存储在解析中.我正在检查天数,但这与此问题无关,因此不包括该代码.

成功与问题:我能够以String格式保存正确的日期和时间,但是当我尝试使用下面的代码以NSDate格式保存时,我的时间错了.

例如:我的日期选择和存储的解析结果如下:

出发日期:日期选择器选择:01/May/2015 01:00 AM +0530
Parse的存储日期:2015年4月30日,19:30

返回日期:日期选择器选择:02/May/2015 01:00 AM +0530
Parse的存储日期:2015年5月1日,19:30

//我的代码如下:

@IBOutlet var dOfTravelText: UITextField!
@IBOutlet var returnDateText: UITextField!

 lazy var dateFormatter: NSDateFormatter = {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd/MMM/yyyy hh:mm a Z"
    //        dateFormatter.dateStyle = .MediumStyle
    //        dateFormatter.timeStyle = .ShortStyle
    return dateFormatter
    }()

    @IBAction func travelDatePicker(sender: UITextField) {

    datePickerView.minimumDate = NSDate()
    datePickerView.datePickerMode = UIDatePickerMode.DateAndTime
    sender.inputView = datePickerView
    timeSelected = sender
    datePickerView.addTarget(self, action: "handleDatePicker:", forControlEvents: UIControlEvents.AllEvents)
}

// Date Picker target - Displaying date in textfield
func handleDatePicker(sender: UIDatePicker) {
    //var dateFormatter = NSDateFormatter()
    //dateFormatter.dateFormat = "mm/dd/yyyy"
    timeSelected.text = dateFormatter.stringFromDate(sender.date)
    println("From Date \(dOfTravelText.text!)")
    println("To Date \(returnDateText.text!)")
}

// Submitting the dates to parse backend
    @IBAction func postBtn(sender: AnyObject) {
            let date = NSDate()
            let calendar = NSCalendar.currentCalendar()
            let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute, fromDate: date)
            let dateMakerFormatter = NSDateFormatter()
            dateMakerFormatter.dateFormat = "dd/MMM/yyyy hh:mm a Z"

        let dD = dateMakerFormatter.dateFromString("\(dOfTravelText.text!)")!
        let departureD = NSDateFormatter.localizedStringFromDate(dD, dateStyle: .MediumStyle, timeStyle: .ShortStyle)
        println("From-------...\(departureD)")

        let rD = dateMakerFormatter.dateFromString("\(returnDateText.text!)")!
        let returnD = NSDateFormatter.localizedStringFromDate(rD, dateStyle: .MediumStyle, timeStyle: .ShortStyle)
        println("To-------\(returnD)")

        var userPost = PFObject(className:"UserPost")   
        userPost["departureDate"] = dD   // Works but has Wrong time
        userPost["rDate"] = rD   // Works but Wrong time
        userPost["travelDate"] = dOfTravelText.text // Works but it is stored in String format
        userPost["returnDate"] = returnDateText.text // Works but it is stored in string format
        userPost.saveInBackgroundWithBlock {
            (success, error: NSError?) -> Void in
            if (success) {
                // The object has been saved.
                println("Saved")

            } else {
                // There was a problem, check error.description
                println("Error")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

//解析数据库列并键入travelDate&returnDate定义为"String"类型

departureDate&rDate定义为"日期"类型

仅供参考:我使用的是平台 - iOS Swift(xcode 6.3,swift 1.2)数据库后端= Parse.com

Vol*_*ker 0

由于 Parse 存储引用 GMT 的日期,因此当您在解析或检索它们时检查它们时,您可能会发现与本地时区的差异。一般来说,日期存储为 GMT。

您可以在 Parse 数据库中添加额外的字段并在其中存储本地时区。检索数据时,您可以使用该信息来解释引用该数据的区域中的日期。

根据您存储的数据类型,可能可以始终以用户本地时区解释日期,即使该时区已更改。如果保存的时区和用户时区不同(因此用户已移动),您还可以询问用户解决方案。