Ho cercato il blog Parse per vedere se riesco a ottenere la soluzione a questo, ma non ho ricevuto alcuna risposta soddisfacente. Quindi, anche se farò chiaramente la domanda qui con tutti i dettagli così che chiunque altro si trovi in una situazione simile troverà facile lavorare.Salvataggio di data e ora nel backend Parse
Richiesta: Ho un campo di testo di partenza e di ritorno che viene aggiornato utilizzando un singolo UIDatePicker. Voglio salvare le date selezionate nel mio database Parse.com. A cui posso interrogare e filtrare i dati. Voglio anche memorizzare il fuso orario locale in analisi, se possibile. Sto lavorando con il controllo del numero di giorni ma non era pertinente a questa domanda, quindi non includo il codice per questo.
Success & Problema: Sono in grado di salvare la data e l'ora corrette in formato String, ma quando provo a salvare nel formato NSDate utilizzando il codice riportato di seguito, ho ottenuto un orario errato.
Per ex: mia selezione data e salva in parse sono le seguenti:
Partenza: selezione Selezione data: 01/Maggio/2015 01:00 0530
data memorizzata in Parse: Apr 30, 2015, 19:30
data di ritorno: selezione selezione data: 02/maggio/2015 01:00 0530
data memorizzata in Parse: May 01, 2015, 19:30
// Il mio codice è il seguente:
@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")
}
}
}
}
// colonna del database Parse e digitare una data di viaggio & returnDate sono definiti come di tipo "String"
departureDate & rdate sono definiti come di tipo "Data"
Solo per informazioni: I sto usando la piattaforma - iOS Swift (xcode 6.3, swift 1.2) Database backend = Parse.com
Parse memorizza la data in GMT. È possibile aggiungere un campo aggiuntivo da analizzare per la memorizzazione del fuso orario e utilizzarlo durante la lettura dei dati per interpretare la data nella zona a cui si fa riferimento. – Volker
@Volker Grazie per la pronta risposta. Quindi quello che ho fatto è, usato postingLocZone = NSTimeZone.localTimeZone(). Abbreviation! e salvato nel mio backend Parse. Più tardi durante il recupero, ho usato dateFormatter.timeZone = NSTimeZone (abbreviazione: "\ (locationZone)"). Questo mi dà i risultati richiesti. Ma è questo il modo giusto per farlo? Coz se l'utente cambia la sua posizione, non cambierà la data di pubblicazione (come cambierà anche NSTimeZone)? Sono un po 'confuso qui. Sarebbe davvero d'aiuto se potessi esprimere il tuo parere su questo.Grazie :) –
Questo è sempre un problema: puoi verificare se il fuso orario locale dell'utente e il fuso orario salvato sono diversi e chiedere all'utente una risoluzione, ad esempio. A seconda dei dati, potrebbe anche essere sufficiente passare al fuso orario locale senza chiedere conferma. – Volker