swift - 自定义本地日期格式
swift - custom local date formatting
使用 swift,我希望我的自定义 dateFormatter.dateFormat 是 MMM-d 或 d-MMM,具体取决于用户所在的位置。如果我使用默认的 short.medium.etc 样式似乎很容易,但出于 design/layout 的考虑,我需要这种自定义格式。
有什么帮助吗?
您可以读取当前设备区域设置并相应地设置格式。
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())
哪种 returns 格式和顺序适用于由您指定的元素(在本例中为月和日)组成的给定语言环境,但并不总是 "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)
使用 swift,我希望我的自定义 dateFormatter.dateFormat 是 MMM-d 或 d-MMM,具体取决于用户所在的位置。如果我使用默认的 short.medium.etc 样式似乎很容易,但出于 design/layout 的考虑,我需要这种自定义格式。
有什么帮助吗?
您可以读取当前设备区域设置并相应地设置格式。
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())
哪种 returns 格式和顺序适用于由您指定的元素(在本例中为月和日)组成的给定语言环境,但并不总是 "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)