swift - 自定义本地日期格式

时间:2015-07-26 00:51:04

标签: swift localization internationalization date-formatting

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

任何帮助?

3 个答案:

答案 0 :(得分:6)

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

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)")
}

答案 1 :(得分:1)

这是一个老问题,但我通过艰苦的研究找到了它。已经有一段时间了,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)

答案 2 :(得分:0)

从服务器使用sql datetime时的上述答案:

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
}