【问题标题】:What is happening to the year?今年发生了什么?
【发布时间】:2015-01-10 02:37:37
【问题描述】:

把它放到一个操场上会产生我不明白的输出。 Dec 30, 2014 的第一个输出是有意义的,但是第二个 Dec 2015 没有。

为什么我的第二个输出显示的是 2015 年?我的语言环境是使用公历的美国。

import UIKit

let dateString = "2014-12-30T00:00:00.000-05:00"
let _dateFormatter = NSDateFormatter()
_dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
_dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ"

let date = _dateFormatter.dateFromString(dateString)!

let format = NSDateFormatter.dateFormatFromTemplate("MMM d YYYY", options: 0, locale: NSLocale.currentLocale())
let formatter = NSDateFormatter()
formatter.dateFormat = format
formatter.dateStyle = NSDateFormatterStyle.MediumStyle


let monthFormat = NSDateFormatter.dateFormatFromTemplate("MMM YYYY", options: 0, locale: NSLocale.currentLocale())
let monthFormatter = NSDateFormatter()
monthFormatter.dateFormat = monthFormat

let fullDate = formatter.stringFromDate(date)
let monthDate = monthFormatter.stringFromDate(date)

【问题讨论】:

    标签: date swift


    【解决方案1】:

    您使用了错误的字符串格式。您必须更改“Y”,即“一年中的一周”。只需将其更改为“y”:

    let dateString = "2014-12-30T00:00:00.000-05:00"
    let dateFormatter = DateFormatter()
    dateFormatter.calendar = Calendar(identifier: .gregorian)
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
     
    if let date = dateFormatter.date(from: dateString) {
        print(date)  // "2014-12-30 05:00:00 +0000\n"
        
        dateFormatter.setLocalizedDateFormatFromTemplate("yyyyMMMd")
        let fullDate = dateFormatter.string(from: date)
        print(fullDate)   // "Dec 30, 2014\n"
        
        dateFormatter.setLocalizedDateFormatFromTemplate("yyyyMMM")
        let monthDate = dateFormatter.string(from: date)
        print(monthDate)  // "Dec 2014\n"
    }
    

    如果您需要一些参考,请查看此图表:

    【讨论】:

    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2016-02-28
    • 2014-02-28
    • 2010-10-02
    • 2020-03-14
    相关资源
    最近更新 更多