快速获取日期和时间

时间:2016-07-05 04:40:19

标签: swift date datetime nsdate nsdateformatter

我一直在研究检索Swift中的日期和时间,这是获得简短,可读的日期/时间输出的推荐策略:

let currentDate = NSDate()
    let formatter = NSDateFormatter()
    formatter.locale = NSLocale.currentLocale() 
    formatter.dateStyle = .ShortStyle
    formatter.timeStyle = .ShortStyle

    let convertedDate = formatter.dateFromString(currentDate) //ERROR HERE

  print("\n\(convertedDate)")

但是这会引发一个异常,说明currentDate不是要传递的有效参数,因为它的类型为NSDate而不是String

你能帮我理解为什么会这样吗?在检索日期和时间时,我只发现了类似的方法。非常感谢,所有的帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

你真的想从NSDate转到String,所以请使用stringFromDate

let convertedDate = formatter.stringFromDate(currentDate)

答案 1 :(得分:1)

以下是使用swift 3语法完成的方法 -

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.google.android.gms:play-services:9.2.0'
}
defaultConfig {
    .....
    multiDexEnabled true
}

BR

答案 2 :(得分:0)

Leo Dabus为Friso Buurman在Question中获取NSDate的字符串写了一个很好的扩展。 Obrigado Leo

Mods请注意:我借用了它并重写它,因为原始代码使用相同的变量名称来声明static constants,{{1和string variables这可能会让新编码人员感到困惑。

它是Leo的一个很好的扩展,它包含argument parameters中可以找到的NSDateFormatter样板代码。

Swift 2

extension NSDateFormatter {
convenience init(stringDateFormat: String) {
    self.init()
    self.dateFormat = stringDateFormat
}
}

extension NSDate {
struct Formatter {
    static let newDateFormat = NSDateFormatter(stringDateFormat: "dd-MM-yyyy")
}
var myNewDate: String {
    return Formatter.newDateFormat.stringFromDate(self)
}
}

控制台输出:

print(NSDate().myNewDate)  // "05-07-2016\n"

Swift 3

extension DateFormatter {
convenience init(stringDateFormat: String) {
    self.init()
    self.dateFormat = stringDateFormat
}
}

extension Date {
struct Formatter {
    static let newDateFormat = DateFormatter(stringDateFormat: "dd-MM-yyyy")
}
var myNewDate: String {
    return Formatter.newDateFormat.string(from: self)
}
}

控制台输出:

print(Date().myNewDate)  // "05-07-2016\n"