【问题标题】:swift - custom local date formattingswift - 自定义本地日期格式
【发布时间】:2015-07-26 00:51:04
【问题描述】:

使用 swift,我希望我的自定义 dateFormatter.dateFormat 为 MMM-d 或 d-MMM,具体取决于用户的位置。如果我使用默认的 short.medium.etc 样式似乎很容易,但出于设计/布局考虑,我需要这种自定义格式。

有什么帮助吗?

【问题讨论】:

    标签: swift localization internationalization date-formatting


    【解决方案1】:

    您可以读取当前设备区域设置并相应地设置格式。

    var dateFormat: String
    switch NSLocale.currentLocale().localeIdentifier {
        case "en_US": dateFormat = "MMM d"
        ...
        default: dateFormat = "d MMM"
    }
    

    也可以看看NSDateFormatter.dateFormatFromTemplate:

    NSDateFormatter.dateFormatFromTemplate("MMM dd", options: 0, locale: NSLocale.currentLocale())
    

    它返回适用于给定语言环境的格式和顺序,由您指定的元素组成(在本例中为月和日),但它并不总是您需要的“MMM d”或“d MMM”。您可以运行它来查看它为每个语言环境实际生成的字符串:

    let formatter: DateFormatter = DateFormatter()
    for id in NSLocale.availableLocaleIdentifiers {
      let locale = NSLocale(localeIdentifier: id)
      let format = DateFormatter.dateFormat(fromTemplate: "MMM dd", options: 0, locale: locale as Locale) ?? "n/a"
      formatter.dateFormat = format
      formatter.locale = locale as Locale!
      let fd = formatter.string(from: NSDate() as Date)
      print("\(id)\t\(format)\t\(fd)")
    }
    

    【讨论】:

    • 非常感谢。这行得通。但是,有没有办法收集所有具有“MMM d”偏好的语言环境,而不是一个广泛的开关列表?
    【解决方案2】:

    使用来自服务器的 sql 日期时间时的上述答案:

    static func getFormatedDateTime(var sqlDate : String?) -> String {
    
        if (sqlDate == nil || sqlDate == "") {
            return "";
        }
    
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH-mm-ss"
        var date = dateFormatter.dateFromString(sqlDate!) as NSDate!
    
        let localFormatter = NSDateFormatter.dateFormatFromTemplate("yyyy/MM/dd HH-mm", options: 0, locale: NSLocale.currentLocale())
    
        dateFormatter.dateFormat = localFormatter
    
        let outputDate = dateFormatter.stringFromDate(date)
    
        return outputDate
    }
    

    【讨论】:

    • “Above”和“Below”在答案中意义不大......它们以随机顺序显示。最好用发帖者的名字来引用另一个答案。
    【解决方案3】:

    这是一个老问题,但我通过努力研究发现了它。已经有一段时间了,Swift 3 出来了。因此,如果有人需要,我将 @sagits 答案转换为 Swift 3:

    let myDate = "2017-08-19 13:52:58"
    
    static func getFormatedDateTime(sqlDate: String?) -> String {
    
        if (sqlDate == nil || sqlDate == "") {
            return ""
        }
    
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH-mm-ss"
        let date = dateFormatter.date(from: sqlDate!)
    
        let localFormatter = DateFormatter.dateFormat(fromTemplate: "yyyy/MM/dd HH-mm", options: 0, locale: NSLocale.current)
    
        dateFormatter.dateFormat = localFormatter
    
    
        let outputDate = dateFormatter.string(from: date!)
    
        return outputDate
    }
    
    //Call the function out
    getFormatedDateTime(sqlDate: myDate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      相关资源
      最近更新 更多