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
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
@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 :) –
Đ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