【发布时间】:2015-07-26 00:51:04
【问题描述】:
使用 swift,我希望我的自定义 dateFormatter.dateFormat 为 MMM-d 或 d-MMM,具体取决于用户的位置。如果我使用默认的 short.medium.etc 样式似乎很容易,但出于设计/布局考虑,我需要这种自定义格式。
有什么帮助吗?
【问题讨论】:
标签: swift localization internationalization date-formatting
使用 swift,我希望我的自定义 dateFormatter.dateFormat 为 MMM-d 或 d-MMM,具体取决于用户的位置。如果我使用默认的 short.medium.etc 样式似乎很容易,但出于设计/布局考虑,我需要这种自定义格式。
有什么帮助吗?
【问题讨论】:
标签: swift localization internationalization date-formatting
您可以读取当前设备区域设置并相应地设置格式。
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)")
}
【讨论】:
使用来自服务器的 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
}
【讨论】:
这是一个老问题,但我通过努力研究发现了它。已经有一段时间了,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)
【讨论】: