如何将当前月份转换为字符串?

58

我需要获取当前月份,但我不知道如何实现。请问该怎么做?

   let date = NSDate()
   let calendar = NSCalendar.currentCalendar()
   let components = calendar.components([.Day , .Month , .Year], fromDate: date)
   
   let year =  components.year
   let month = components.month
   let day = components.day

我已经尝试过这个方法,但它没有起作用。


你想要作为字符串的序数,月份名称(用哪种语言)还是其他什么?并考虑升级到Swift 3。那是未来。 - vadian
@vadian 3已经过去了。我们现在是3.1。 - Leo Dabus
@LeoDabus 当然我是指Swift 3中的,就像一个重大升级。 - vadian
@vadian,我只是想表明他尽快升级的重要性 :) - Leo Dabus
3个回答

114
let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "LLLL"
let nameOfMonth = dateFormatter.string(from: now)

7
独立月份的正确格式为 LLLL。http://userguide.icu-project.org/formatparse/datetime - Leo Dabus
有没有可能设置返回月份的语言?我尝试使用locale但它不起作用。我想获取设置在iPhone上的当前语言。 - mikro098
5
默认情况下,DateFormatter 使用设备的本地设置。当然,您可以通过设置不同的本地设置来覆盖它: dateFormatter.locale = Locale(identifier: "es") - André Slotta
1
如果您要显示的不仅仅是月份,例如月份和日期,那么这可能会存在问题。最好使用.setLocalizedDateFormatFromTemplate来考虑可能的本地化格式顺序差异。 - craft

48
如果您正在使用Swift 3.0,那么扩展和Date类是不错的选择。
请尝试下面的代码。
extension Date {
    var month: String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MMMM"
        return dateFormatter.string(from: self)
    }    
}

像下面这样开始使用它:

 let date = Date()
 let monthString = date.month

我正在使用Swift 2。 - iron
如果可以的话,就使用Swift 3.0吧,因为最新的Swift有很多变化。 - Balaji Galave
1
Swift 4.0 解决方案:DateFormatter().monthSymbols[currentMonth - 1] - cspam
我会将其更改为 static var month: String { .... },这样就可以在不创建实例的情况下访问它。 - Weston Mitchell

16

Swift 3.0及更高版本

您可以使用DateFormatter(),请参见下文中用于扩展Date的示例。

将此代码添加到全局作用域的项目任何位置即可。

extension Date {
    func monthName() -> String {
            let df = DateFormatter()
            df.setLocalizedDateFormatFromTemplate("MMM")
            return df.string(from: self)
    }
}

然后你可以在你的代码中任何地方使用这个。

let date = Date()
date.monthName() // Returns current month e.g. "May"

我应该使用NSDate吗?date未声明...Swift 2 - iron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接