NSdate的字符串返回nil

时间:2015-04-30 03:47:54

标签: ios swift datetime nsdateformatter

我想将我的String dateTime分隔为不同的变量日期和时间,因为我将单独显示它。我怎么能这样做?

这是我获取日期的代码,它返回nil:

let datetime = "2015-04-06T13:24:11.913"
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MMM-DD-YYYY"
    let date = dateFormatter.dateFromString(datetime)
    println(date)

提前致谢。

更新: 这是我的错误, enter image description here

更新2: 它没有返回错误,但它为格式化日期

提供了错误的月份

enter image description here

5 个答案:

答案 0 :(得分:5)

使用此格式化程序

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

您的格式化程序必须匹配您的字符串

这是我的操场截图,效果很好。 enter image description here

答案 1 :(得分:3)

        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 enter image description here感谢@LeonardoSavioDabus给出此图片=> Swift NSDate UTC time and local time

答案 2 :(得分:1)

除了你测试的字符串有毫秒的问题,而你的数组中的日期只有几秒,现在的问题是Y是一年中的一周。您需要使用带有日期格式的小写“y”和小写“d”。日期格式应如下所示:

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"

从您可以使用此扩展程序的日期中提取月份组件:

extension NSDate {
    var month: Int {
        return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(NSCalendarUnit.CalendarUnitMonth, fromDate: self)
    }
}


NSDate().month   // 5

答案 3 :(得分:0)

一旦用户将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"

答案 4 :(得分:-1)

尝试这样,

    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)

您将获得输出赞:

  

2015年4月6日

     

13时24分11秒

享受编码!!