从Parse用户对象

时间:2017-08-10 16:47:40

标签: swift date parse-platform

这对我不起作用。我有一个从数据库中得到的值,这显然是一个有效的日期,我可以将它打印出来:

let datefromu = "\(PFUser.current()!.object(forKey:"original_date_route_started")!)"
print("I fetched \(datefromu)")

打印:I fetched 2017-08-10 15:50:43 +0000

我必须补充一点,如果我查看原始数据库,它就是这样编写的: 2017-08-10T15:50:43.436Z

所以我认为输出已经是Parse从日期字段格式化输出的方式了吗?

最重要的是,当我想填充一个日期变量(original_date_route_started:Date?)并将该字符串转换为日期时,我收到零!:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
self.original_date_route_started = formatter.date(from: datefromu)

1 个答案:

答案 0 :(得分:1)

您要将PFUser.current()!.object(forKey:"original_date_route_started")转换为日期吗?那么你应该考虑进行子类化以避免处理DateFormatters:

假设{P}中original_date_route_started被正确定义为Date(如果没有,我会更新答案):

import Foundation
import Parse

class UserParse: PFUser {

    @NSManaged var original_date_route_started: Date?

}

如果要为其设置新值:

var user = UserParse.current()!
user.original_date_route_started = Date(timeIntervalSinceNow: -3600 * 4) // 4hs ago
user.saveInBackground()

// Your sample code:
let datefromu = UserParse.current()!.original_date_route_started
self.original_date_route_started = datefromu

您是否只是在另一个不是self.original_date_route_started的课程中设置PFUser的价值时遇到问题?有两种方法可以做到:

  • ISO8601DateFormatter iOS >= 10(有关详细信息,请参阅source code

    let isoDateFormatter= ISO8601DateFormatter()
    
  • iOS >= 2

    的自定义DateFormatter
    var isoDateFormatter: DateFormatter = {
        $0.locale     = Locale(identifier:"en_US_POSIX")
        $0.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
        $0.timeZone   = TimeZone(secondsFromGMT: 0) // Or Locale(identifier: "GMT")
        return $0
    }(DateFormatter())
    

将字符串转换为日期:

let testString = "2017-08-10T17:53:51+0000"
isoDateFormatter.date(from: testString)