2015-04-19 15 views
5

Tôi đã tìm kiếm blog Parse để xem liệu tôi có thể nhận được giải pháp cho điều này hay không, nhưng không nhận được bất kỳ câu trả lời thỏa đáng nào. Vì vậy, tôi mặc dù tôi sẽ yêu cầu rõ ràng câu hỏi ở đây với tất cả các chi tiết để bất cứ ai khác bị mắc kẹt ở tình huống tương tự sẽ tìm thấy nó dễ dàng để làm việc.Tiết kiệm Ngày và giờ trong Parse backend

Cần: Tôi có trường văn bản trả về và trả về được cập nhật bằng một UIDatePicker đơn. Tôi muốn lưu các ngày đã chọn trong cơ sở dữ liệu Parse.com của mình. Tôi có thể truy vấn và lọc dữ liệu. Tôi cũng muốn lưu trữ múi giờ địa phương trong phân tích cú pháp nếu có thể. Tôi đang làm việc với việc kiểm tra số ngày nhưng nó không liên quan đến câu hỏi này nên không bao gồm mã cho câu hỏi đó.

Thành công & Sự cố: Tôi có thể lưu ngày và giờ chính xác ở định dạng Chuỗi, nhưng khi tôi cố gắng lưu ở định dạng NSDate bằng mã bên dưới, tôi nhận được thời gian sai.

Đối với ví dụ: chọn ngày của tôi và kết quả được lưu trữ trong phân tích cú pháp như sau:

Khởi hành ngày: Lựa chọn Ngày Picker: 01/May/2015 01:00 0530
ngày lưu trữ trong Parse: Apr 30 năm 2015, 19:30

Return ngày: lựa chọn ngày Picker: 02/May/2015 01:00 0530
ngày lưu trữ trong Parse: May 01, 2015, 19:30

// Mã của tôi như sau:

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

// Parse cột cơ sở dữ liệu và gõ travelDate & returnDate được định nghĩa là kiểu "String"

departureDate & rDate được định nghĩa là số loại "Ngày"

Chỉ cần cung cấp thông tin: Tôi đang sử dụng Nền tảng - iOS Swift (xcode 6.3, swift 1.2) Cơ sở dữ liệu backend = Parse.com

+1

Phân tích cú pháp lưu trữ ngày theo giờ GMT. Bạn có thể thêm một trường bổ sung để phân tích cú pháp để lưu trữ múi giờ và sử dụng khi đọc dữ liệu để diễn giải ngày trong vùng được tham chiếu. – Volker

+0

@Volker Cảm ơn bạn đã trả lời nhanh chóng. Vì vậy, những gì tôi đã làm là, được sử dụng postLocZone = NSTimeZone.localTimeZone(). và lưu nó trong phần phụ trợ Parse của tôi. Sau đó trong khi truy xuất, tôi đã sử dụng dateFormatter.timeZone = NSTimeZone (viết tắt: "\ (locationZone)"). Điều này mang lại cho tôi những kết quả cần thiết. Nhưng đây có phải là cách đúng để làm điều này không? Coz nếu người dùng thay đổi vị trí của mình, sẽ không thay đổi ngày đăng (vì NSTimeZone cũng sẽ thay đổi)? Tôi hơi bối rối ở đây. Sẽ thực sự giúp đỡ nếu bạn có thể cho quan điểm của bạn về điều này.Cảm ơn :) –

+0

Điều đó luôn luôn là vấn đề - bạn có thể kiểm tra xem múi giờ địa phương của người dùng và múi giờ đã lưu có khác nhau không và yêu cầu người dùng giải quyết ví dụ. Tùy thuộc vào dữ liệu của bạn, bạn cũng có thể thay đổi múi giờ địa phương mà không cần nhắc. – Volker

Trả lời

0

Vì phân tích cú pháp lưu trữ ngày tham chiếu ed đến GMT, khi bạn kiểm tra chúng trên phân tích cú pháp hoặc lấy chúng, bạn có thể tìm thấy sự khác biệt này với múi giờ địa phương của bạn. Nói chung ngày được lưu trữ trong GMT.

Bạn có thể thêm trường bổ sung trong cơ sở dữ liệu Phân tích cú pháp của mình và lưu múi giờ địa phương tại đó. Khi truy xuất dữ liệu, bạn có thể sử dụng thông tin đó để diễn giải ngày trong khu vực được tham chiếu.

Tùy thuộc vào loại dữ liệu bạn lưu trữ có thể không sao giải thích ngày trong múi giờ địa phương của người dùng, ngay cả khi điều này đã thay đổi. Bạn cũng có thể yêu cầu người dùng giải quyết nếu múi giờ đã lưu và múi giờ của người dùng khác nhau (do đó người dùng đã di chuyển).

Các vấn đề liên quan