Swift NSDateFormatter 未使用正确的区域设置和格式

问题描述 投票:0回答:6

这是我的代码:

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = NSDateFormatter.dateFormatFromTemplate("d MMMM y", options: 0, locale: NSLocale(localeIdentifier: "en-US"))
cmt.date = usDateFormat.stringFromDate(currentDate)

我原本期待得到“15 October 2015”,但结果却得到“oktober 15, 2015”。该月份采用瑞典语言。

我做错了什么?区域设置和格式都错误。

ios swift nsdate nsdateformatter
6个回答
33
投票

试试这个:

let dateString = "2015-10-15"
let formater = NSDateFormatter()
formater.dateFormat = "yyyy-MM-dd"
print(dateString)

formater.locale =  NSLocale(localeIdentifier: "en_US_POSIX")
let date = formater.dateFromString(dateString)
print(date)

Swift 3 Xcode 8

let dateString = "2015-10-15"
let formater = DateFormatter()
formater.dateFormat = "yyyy-MM-dd"
print(dateString)

formater.locale =  Locale(identifier: "en_US_POSIX")
let date = formater.date(from: dateString)
print(date!)

希望有帮助。


16
投票

查看 dateFormatFromTemplate

文档
。它指出:

返回值

表示日期的本地化日期格式字符串 模板中给出的格式组件,适当排列 由 locale 指定的区域设置。

返回的字符串可能不完全包含中给出的那些组件 模板,但可能(例如)进行特定于区域设置的调整 已申请。

这就是编排和语言的问题。要获取您要查找的日期,您需要设置日期格式化程序的

dateFormat
locale
,如下所示:

let currentDate = NSDate()
let usDateFormat = NSDateFormatter()
usDateFormat.dateFormat = "d MMMM y"
usDateFormat.locale = NSLocale(localeIdentifier: "en_US")
cmt.date = usDateFormat.stringFromDate(currentDate)

6
投票

更好的 Swift 3/3.1 解决方案:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")

3
投票

尝试这个代码

let locale1:Locale = NSLocale(localeIdentifier: "en_US") as Locale
var date =  Date().description(with: locale1)
print(date)

//2017 年 4 月 3 日星期一...


1
投票

您可以在 Swift5 中使用日期扩展:

extension Date {
    var timestamp: String {
        let dataFormatter = DateFormatter()
        dataFormatter.locale = Locale(identifier: "en_US_POSIX")
        dataFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS"
        return String(format: "%@", dataFormatter.string(from: self))
    }
}

您可以通过

获取时间戳
print("Now: \(Date().timestamp)")

0
投票

日期区域设置:

dateFormatter.locale = Locale(identifier: Locale.preferredLanguages.first ?? "en")
© www.soinside.com 2019 - 2024. All rights reserved.