我有一个连接到日期选择器的文本字段
然后我尝试将所选日期存储到核心数据中
我注销用户选择的日期似乎没问题:
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
为何与众不同?我该如何阻止这种情况发生?
很抱歉,如果它显而易见,我没有发现。
答案 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!)