这对我不起作用。我有一个从数据库中得到的值,这显然是一个有效的日期,我可以将它打印出来:
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)
答案 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()
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)