2015-04-19 14 views
5

Bu çözüme ulaşıp ulaşamayacağımı görmek için Parse blogunu aradım, ancak tatmin edici bir yanıt almadı. Bu yüzden, buradaki soruları tüm detaylarıyla açık bir şekilde soracağım, böylece benzer bir durumda kalan herkes çalışmayı kolay bulacaktır.Kaydetme Tarih ve saatte Parse backend

İhtiyacım: Tek bir UIDatePicker kullanılarak güncellenen bir gidiş ve dönüş metni alanına sahibim. Seçilen tarihleri ​​Parse.com veritabanımda kaydetmek istiyorum. Verileri sorgulayıp filtreleyebileceğim. Mümkünse yerel saat dilimini ayrıştırmak istiyorum. Gün sayısını kontrol ederek çalışıyorum ancak bu soruyla alakalı değildi;

ex

: my tarih seçimi ve ayrıştırma saklanan sonuç olarak aşağıdaki gibidir:

Ayrılış Tarihi: Tarih Seçici seçimi: 01/Mayıs/2015 01:00 0530
Parse içinde Saklanan tarihi: Nisan 30 2015, 19:30

Dönüş tarihi: Tarih Seçici seçimi:/2015 02/Mayıs 01:00 0530
Parse Depolanan tarihi: 2015, 01 Mayıs 19:30

// Kodum aşağıdaki gibidir:

@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") 
      } 
     } 
    } 
} 

// Ayrıştırma veritabanı sütun ve travelDate & Geri gönderme yazın "String"

departureDate & rDate Çeşidi olarak tanımlanmaktadır "Tarih" Sadece bilgi için

türde olanlar olarak tanımlanır: Ben Platformunu kullanıyorum - iOS Swift (xcode 6.3, hızlı 1.2) Veritabanı arka planı = Parse.com

+1

Ayrıştırma, tarihi GMT'ye kaydeder. Saat dilimini depolamak için ayrıştırmak için fazladan bir alan ekleyebilir ve veriyi okurken o bölgeye başvuruda bulunmak için verileri okurken kullanabilirsiniz. – Volker

+0

@Volker Hızlı yanıt için teşekkür ederiz. Benim yaptığım şey, postLocZone = NSTimeZone.localTimeZone() kısaltmasıdır! ve Parse arka ucuma kaydettim. Daha sonra alınırken dateFormatter.timeZone = NSTimeZone (kısaltma: "\ (locationZone)") kullanılır. Bu bana gerekli sonuçları veriyor. Ama bunu yapmanın doğru yolu bu mu? Kullanıcı konumu değiştirirse Coz, yayınlanma tarihi değişmez (NSTimeZone da değişecek)? Burada kafam karıştı. Bu konuda görüşlerinizi iletebilirseniz gerçekten yardımcı olurdum.Teşekkürler :) –

+0

Bu her zaman bir sorun - kullanıcının yerel saat diliminin ve kaydedilen zaman diliminin farklı olup olmadığını kontrol edebilir ve örneğin bir çözüm için kullanıcıdan sorun. Verilerinize bağlı olarak, yalnızca yerel saat dilimini sormadan değiştirmek de uygun olabilir. – Volker

cevap

0

Parse, tarihleri ​​başvuruyor GMT'ye yönlendirin, bunları ayrıştırdığınızda veya geri çağırdığınızda, bu farkı yerel saat diliminize göre bulabilirsiniz. Genel tarihlerde GMT'de saklanır.

Ayrıştırma veritabanınıza fazladan bir alan ekleyebilir ve burada yerel saat dilimini depolayabilirsiniz. Verileri alırken, bu bilgiyi başvurulan bölgedeki tarihe yorumlamak için kullanabilirsiniz.

Sakladığınız verilerin türüne bağlı olarak, her zaman tarihi yerel saat diliminde kullanıcıların yerel saat diliminde yorumlanması iyi olabilir. Bu değişti. Ayrıca, kayıtlı zaman dilimi ve kullanıcı zaman dilimi farklıysa (kullanıcı taşındıysa) kullanıcıya da bir çözünürlük isteyebilirsiniz.