字符串到 NSdate returns 无
String to NSdate returns nil
我想将我的 String dateTime 分离到不同的变量日期和时间,因为我将单独显示它。我该怎么做?
这是我仅获取日期的代码,它 return 为零:
let datetime = "2015-04-06T13:24:11.913"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM-DD-YYYY"
let date = dateFormatter.dateFromString(datetime)
println(date)
提前致谢。
更新:
这是我的错误,
更新 2:
它没有 return 错误,但它为我提供了格式化日期
的错误月份
使用这个格式化程序
let datetime = "2015-04-06T13:24:11.913"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let date = dateFormatter.dateFromString(datetime)
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitHour, fromDate: date!)
components.day//This is 6
您的格式化程序必须匹配您的字符串
这是我的游乐场截图,效果很好。
这样试试,
let datetime = "2015-04-06T13:24:11.913"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let dateFromString = dateFormatter.dateFromString(datetime)
var calendar = NSCalendar.currentCalendar()
var components:NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitSecond | NSCalendarUnit.CalendarUnitHour, fromDate: dateFromString!)
var stringDate = "\(components.month)-\(components.day)-\(components.year)"
var stringTime = "\(components.hour):\(components.minute):\(components.second)"
println(stringDate)
println(stringTime)
您将得到如下输出:
4-6-2015
13:24:11
享受编码!!
let datetime = "2015-04-06T13:24:11" //"2015-04-06T13:24:11.913"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-mm-dd'T'HH:mm:ss" //"yyyy-mm-dd'T'HH:mm:ss.SSS"
let date = dateFormatter.dateFromString(datetime)
let myTime = NSDateFormatter.localizedStringFromDate(date!, dateStyle: .NoStyle , timeStyle: .MediumStyle)
let myDate = NSDateFormatter.localizedStringFromDate(date!, dateStyle: .ShortStyle , timeStyle: .NoStyle)
println(date!)//DateWithTime
println(myDate)//Date
println(myTime)//time
这有助于您格式化.. NSDateFormatter_Class
感谢@LeonardoSavioDabus 提供这张图片 => Swift NSDate UTC time and local time
一旦用户将 iOS 日历设置为公历以外的任何日历,其他答案中的所有 NSDateFormatter
都会给出错误的日期。您的日期字符串也没有提及任何时区,所以我假设是 UTC。
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone(name: "UTC")
formatter.calendar = NSCalendar.gregorianCalendar()
formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSS"
除了您正在测试的字符串有毫秒而数组中的日期只有几秒的问题之外,现在的问题是 Y 代表一年中的第几周。您需要使用带有日期格式的小写“y”以及小写“d”。日期格式应如下所示:
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
要从日期中提取月份部分,您可以使用此扩展程序:
extension Date {
var month: Int {
Calendar(identifier: .gregorian).component(.month, from: self)
}
}
NSDate().month // 5
我想将我的 String dateTime 分离到不同的变量日期和时间,因为我将单独显示它。我该怎么做?
这是我仅获取日期的代码,它 return 为零:
let datetime = "2015-04-06T13:24:11.913"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM-DD-YYYY"
let date = dateFormatter.dateFromString(datetime)
println(date)
提前致谢。
更新:
这是我的错误,
更新 2: 它没有 return 错误,但它为我提供了格式化日期
的错误月份使用这个格式化程序
let datetime = "2015-04-06T13:24:11.913"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let date = dateFormatter.dateFromString(datetime)
let calendar = NSCalendar.currentCalendar()
let components = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitHour, fromDate: date!)
components.day//This is 6
您的格式化程序必须匹配您的字符串
这是我的游乐场截图,效果很好。
这样试试,
let datetime = "2015-04-06T13:24:11.913"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let dateFromString = dateFormatter.dateFromString(datetime)
var calendar = NSCalendar.currentCalendar()
var components:NSDateComponents = calendar.components(NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitSecond | NSCalendarUnit.CalendarUnitHour, fromDate: dateFromString!)
var stringDate = "\(components.month)-\(components.day)-\(components.year)"
var stringTime = "\(components.hour):\(components.minute):\(components.second)"
println(stringDate)
println(stringTime)
您将得到如下输出:
4-6-2015
13:24:11
享受编码!!
let datetime = "2015-04-06T13:24:11" //"2015-04-06T13:24:11.913"
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-mm-dd'T'HH:mm:ss" //"yyyy-mm-dd'T'HH:mm:ss.SSS"
let date = dateFormatter.dateFromString(datetime)
let myTime = NSDateFormatter.localizedStringFromDate(date!, dateStyle: .NoStyle , timeStyle: .MediumStyle)
let myDate = NSDateFormatter.localizedStringFromDate(date!, dateStyle: .ShortStyle , timeStyle: .NoStyle)
println(date!)//DateWithTime
println(myDate)//Date
println(myTime)//time
这有助于您格式化.. NSDateFormatter_Class
一旦用户将 iOS 日历设置为公历以外的任何日历,其他答案中的所有 NSDateFormatter
都会给出错误的日期。您的日期字符串也没有提及任何时区,所以我假设是 UTC。
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone(name: "UTC")
formatter.calendar = NSCalendar.gregorianCalendar()
formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSS"
除了您正在测试的字符串有毫秒而数组中的日期只有几秒的问题之外,现在的问题是 Y 代表一年中的第几周。您需要使用带有日期格式的小写“y”以及小写“d”。日期格式应如下所示:
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
要从日期中提取月份部分,您可以使用此扩展程序:
extension Date {
var month: Int {
Calendar(identifier: .gregorian).component(.month, from: self)
}
}
NSDate().month // 5