如何在日期格式中添加th和st

时间:2018-06-02 09:21:47

标签: ios swift nsdate nsdateformatter

我想将日期转换为"星期五17日,下午7:00" 此格式。但我无法添加" th"和" st"在约会之后。我使用下面的代码来转换这样的日期格式。请告诉我。 我为这种格式做了什么?

 func convertDateFormater(_ date: String) -> String
    {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
        dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?
        //dateFormatter.locale = Locale(identifier: "your_loc_id")
        let convertedDate = dateFormatter.date(from: date)
        guard dateFormatter.date(from: date) != nil else {
            assert(false, "no date from string")
            return ""
        }
        dateFormatter.dateFormat = "EEEE dd, h:mma"///this is what you want to convert format
        dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone?
        let timeStamp = dateFormatter.string(from: convertedDate!)

        return timeStamp
    }

2 个答案:

答案 0 :(得分:2)

只要不同的区域设置不起任何作用,您就可以执行以下操作:

let date = Date()

let calendar = Calendar.current

let day = calendar.component(.day, from: date)
let daySuffix: String

switch day {
case 11...13: return "th"
default:
    switch day % 10 {
    case 1: return "st"
    case 2: return "nd"
    case 3: return "rd"
    default: return "th"
    }
}

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE dd'\(daySuffix)', h:mma"

dateFormatter.string(from: date)

答案 1 :(得分:0)

此外,如果在静态帮助器函数中使用了它,请确保设置daySuffix而不是返回。我的用例非常相似,尽管我使用的是从API提取的时间,但是我需要此函数作为String的扩展,是一个iOS Swift项目。我结束了以下内容:

    static func formatPrettyDate(_ startTime: Int) -> String {
        let date = Date(timeIntervalSince1970: TimeInterval(startTime / 1000))
        let calendar = Calendar.current
        let day = calendar.component(.day, from: date)
        let daySuffix: String

        switch day {
        case 11...13: daySuffix = "th"
        default:
            switch day % 10 {
            case 1: daySuffix = "st"
            case 2: daySuffix = "nd"
            case 3: daySuffix = "rd"
            default: daySuffix = "th"
            }
        }


        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "EEEE, MMMM dd'\(daySuffix)'"
        return dateFormatter.string(from: date)
    }

这返回了类似这样的内容:Thursday, August 27th,现在我可以在需要从某个时期算起一个漂亮日期的任何UI字符串组件上使用它。

@AndréSlotta给出了一个很好的答案,所以所有的荣誉都应该归功于他。我只是更改了用例。