快速转换为Parse用户对象中字符串的日期

问题描述:

这不适用于我。我有一个值,我从显然是一个有效日期数据库得到,我可以把它打印出来罚款:快速转换为Parse用户对象中字符串的日期

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

所以我认为,输出已经从格式化日期字段输出的解析的方式吗?

底线,当我想填充日期变量我已经(original_date_route_started:日期)和字符串转换为日期,我越来越零!:

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

看起来'datefromu'已经是'Date'而不是'String'了。 – rmaddy

+1

你确定你不想写'formatter.string(from:datefromu)'吗? –

+0

@rmaddy你是对的。但是,我怎样才能将它设置为我的日期变量?斯威夫特不知道它的日期。 –

你想转换PFUser.current()!.object(forKey:"original_date_route_started")到日期?那么你应该考虑的子类,以避免处理DateFormatters:

假设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 

你只是有问题,另一个类,这不是01设置self.original_date_route_started的价值?有两种方法做到这一点:

  • ISO8601DateFormatteriOS >= 10(见source code有详细介绍)

    let isoDateFormatter= ISO8601DateFormatter() 
    
  • 定制DateFormatteriOS >= 2

    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) 
+0

我使用original_date_route_started作为我的课程的许多领域的日期值,不一定在解析用户的范围内。所以我有它的方式在上面,并继续作为self.original_date_route_started 它只是当我没有它的价值,然后我从分析用户在数据库中检索它,并且目前没有成功尝试设置它从该值 –

+0

查看更新回答 – nathan

+0

是的,在你的例子中,你可以然后设置一个变量,应该是Date类型如此:self.original_date_route_started = isoDateFormatter.date(from:testString)我不这么认为! - 这就是我想要做的! –