在coredata swift中存储日期

时间:2016-01-29 23:40:07

标签: swift date core-data

我有一个连接到日期选择器的文本字段

然后我尝试将所选日期存储到核心数据中

我注销用户选择的日期似乎没问题:

2016-01-29 00:00:00 +0000 [我用一些代码剥离时间组件]

将其转换为字符串并显示在名为startDate的文本字段中。

func handleDatePicker(sender: UIDatePicker) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "EEE, dd MMM YYYY"
        startDate.text = dateFormatter.stringFromDate(sender.date)
    }

现在奇怪的是,当我尝试将其存储到CoreData中并将字符串转换回日期时(我将其保存到的属性配置为日期)

let cont = self.context
        let newCustomer = NSEntityDescription.entityForName("Customer", inManagedObjectContext: cont)
        let aCust = Customer(entity: newCustomer!, insertIntoManagedObjectContext: cont)

let DF = NSDateFormatter()
        DF.dateFormat = "EEE, dd MMM YYYY"
        aCust.c15das = DF.dateFromString(startDate.text!)
        print("Saved Date: \(DF.dateFromString(startDate.text!))")

现在打印出日志:

2015-12-25 00:00:00 +0000

为何与众不同?我该如何阻止这种情况发生?

很抱歉,如果它显而易见,我没有发现。

2 个答案:

答案 0 :(得分:2)

"EEE, dd MMM YYYY" - > YYYY"Week of Year Calendar", aka "ISO Week Date System"。第一周没有从1月1日开始。如果1月1日是星期一,星期二,星期三或星期四,则整个星期是新年的第一周。如果是周五,周六或周日,则该周是去年的第53周。所以这是一个年份只有整数周的日历。 52或53,而不是365或366天 在这个日历中,1月29日将是2016年 - 2016年 - W4-5的第4周的第5天。这个系统不知道几个月,因此你的约会是无稽之谈。

您需要"EEE, dd MMM yyyy",因为yyyy表示从1月1日开始到12月31日结束的年份 - 格里高利年。

  

[我用一些代码剥离时间组件]

你不应该这样做。相反,NSCalendar的方法是在一天开始时获取日期。

var today: NSDate?
cal.rangeOfUnit(.Day, startDate: &today, interval: nil, forDate: date)

答案 1 :(得分:0)

试试这个对我有用的代码:

let dateString = "Fri, 29 Jan 2016" // change to your date format

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy"
dateFormatter.timeZone = NSTimeZone(name: "UTC")

let date = dateFormatter.dateFromString(dateString)
print(date!)