转换日期为“DD.MM.YYYY”斯威夫特
问题描述:
我的API,其中的参数之一就是其格式为“DD.MM.YYYY” Date类型的工作形式。转换日期为“DD.MM.YYYY”斯威夫特
我不能设法,将其转换我创造了日期的延长,我试图执行这样说:
extension Date {
var shortDate: Date {
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
let strDate = formatter.string(from: self)
let modifiedDate = formatter.date(from: strDate)
return modifiedDate!
}
}
,我这样称呼它:
let day = Date().shortDate
不幸的是,这是行不通的,它看起来像这个:
2017年6月18日21:00:00 +0000
我该如何解决呢?
答
根据我的理解,您需要使用表示日期格式的API "dd.MM.yyyy”
进行通信。下面是简单的功能,你需要实现:
class MyAPIFunctions
{
static let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
// make sure the following are the same as that used in the API
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale.current
return formatter
}()
class func shortString(fromDate date: Date) -> String {
return formatter.string(from: date)
}
class func date(fromShortString string: String) -> Date? {
return formatter.date(from: string)
}
}
我宣布formatter
作为一个独立的恒定,以节省重新初始化的开销与每个调用。 一旦你已经添加了这些功能,您可以发送日期到API如下:
let today = Date()
let todayString = MyAPIFunctions.shortString(fromDate: today)
// send todayString to API
在API中的字符串转换为Date对象,
let apiString = "17.07.2017"
guard let apiDate = MyAPIFunctions.date(fromShortString: apiString) else {
// deal with formatting error here
return
}
// work with apiDate object
+1
不要忘记,当解析/编码API格式时,您应该始终设置语言环境,否则当当前语言环境使用非格利尼日历时,您可以获得令人惊喜的结果。 – Sulthan
答
let date = Date.init()
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy"
formatter.locale = NSLocale(localeIdentifier: "en_US") as Locale!
let strdate1 = formatter.string(from: date as Date)
print(strdate1)
这是正确的。你期待什么结果? – Sulthan
@Sulthan我期待以格式18.06.2017获得号码 – Melany
您正在返回日期。日期没有格式,也没有时区。你为什么不返回可能包含正确结果的'strDate'? – Sulthan