swift DateFormatter

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift DateFormatter相关的知识,希望对你有一定的参考价值。

参考技术A DateFormatter常用于Date与String的互相转换。通过配置 dateFormat 属性使其能够转换成不同需求的字符串,配置 locale 属性使其能够适配不同的语言。

该属性用在英文等语言中,输出的字符串首字母是否需要大写。(其它人的文章中说明的,并未测试。)

默认是使用 Asia/Shanghai 时区, zh_CN 本地化, gregorian 日历。

其作用是先将dateFormatTemplate转换成规范的dateFormat字符串,再赋值给 dateFormat 。

默认为behavior10_4。

默认为""。
以 dateFormat 为yyyy-MM-dd HH:mm:ss,结果为2020-12-16 15:19:55的情况下,在 zh_CN 本地化来看。

以上的字母支持用多个叠加,比如M:
M 不带前导零 (一月表示为1)。
MM 带前导零 (一月表示为01)。
MMM 缩写形式 (一月为1月)。
MMMM 完整月份名 (一月为一月)。
不同语言下显示不同,如 MMM 在英语中为 Jan , MMMM 为 January 。

若要直接显示上面的字母,则需要加上单引号''。

功能与 dateFormat(fromTemplate tmplate: String, options opts: Int, locale: Locale?) -> String? 方法相同。

dateStyle 、 timeStyle 与 dateFormat 都赋了值后,先赋值的无效。

默认都为 current ,即本地化为 zh_CN ,时区为 Asia/Shanghai ,日历为 gregorian 。

twoDigitStartDate 默认为1950-01-01 00:00:00 +0000。
defaultDate 默认为nil。
gregorianStartDate 默认为1582-10-15 00:00:00 +0000。

generatesCalendarDates 默认为false。当为true时,在解析日期时会返回 NSCalendarDate 实例而不是 NSDate ,但 NSCalendarDate 在Swift中已不可用,因而 generatesCalendarDates 已失效。

isLenient 默认为false,表示要严格按照 dateFormat 来格式化。当为true时,即使字符串与 dateFormat 有差距,也能成功转换为Date。

doesRelativeDateFormatting 默认为false。当为true时,会以前天、昨天、今天、明天、后天来显示日期而不是通过年月日来显示。

注意:标志符在不同的本地化下为不同的结果。

eraSymbols 默认为 ["公元前", "公元"]。
longEraSymbols 默认为 ["公元前", "公元"]。
在 en_US 本地化下,
eraSymbols 默认为 ["BC", "AD"]。
longEraSymbols 默认为 ["Before Christ", "Anno Domini"]。

在 dateFormat 中输入G、GG、GGG时,则会匹配 eraSymbols 的内容。
输入GGGG时,则会匹配 longEraSymbols 的内容。

monthSymbols 和 standaloneMonthSymbols 默认为 ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]。
shortMonthSymbols 和 shortStandaloneMonthSymbols 默认为 ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]。
veryShortMonthSymbols 和 veryShortStandaloneMonthSymbols 默认为 ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]。
在 en_US 本地化下,
monthSymbols 和 standaloneMonthSymbols 默认为 ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]。
shortMonthSymbols 和 shortStandaloneMonthSymbols 默认为 ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]。
veryShortMonthSymbols 和 veryShortStandaloneMonthSymbols 默认为 ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]。

standaloneMonthSymbols 、 shortStandaloneMonthSymbols 、 veryShortStandaloneMonthSymbols 这三种并未测试出效果,不知在何处使用。

在 dateFormat 中输入M时,会匹配无前导零的数字。
输入MM时,会匹配有前导零的数字。
输入MMM时,会匹配 shortMonthSymbols 的内容。
输入MMMM时,则会匹配 monthSymbols 的内容。
输入MMMMM时,则会匹配 veryShortMonthSymbols 的内容。

weekdaySymbols 和 standaloneWeekdaySymbols 默认为 ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]。
shortWeekdaySymbols 和 shortStandaloneWeekdaySymbols 默认为 ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]。
veryShortWeekdaySymbols 和 veryShortStandaloneWeekdaySymbols 默认为 ["日", "一", "二", "三", "四", "五", "六"]。
在 en_US 本地化下,
weekdaySymbols 和 standaloneWeekdaySymbols 默认为 ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]。
shortWeekdaySymbols 和 shortStandaloneWeekdaySymbols 默认为 ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]。
veryShortWeekdaySymbols 和 veryShortStandaloneWeekdaySymbols 默认为 ["S", "M", "T", "W", "T", "F", "S"]。

standaloneWeekdaySymbols 、 shortStandaloneWeekdaySymbols 、 veryShortStandaloneWeekdaySymbols 这三种并未测试出效果,不知在何处使用。

在 dateFormat 中输入E、EE、EEE、eee时,会匹配 shortWeekdaySymbols 的内容。
输入EEEE、eeee时,则会匹配 weekdaySymbols 的内容。
输入EEEEE、eeeee时,则会匹配 veryShortWeekdaySymbols 的内容。
输入e时,会匹配无前导零的数字(该周的第几天)。
输入ee时,会匹配前导零的数字(该周的第几天)。

amSymbol 默认为 上午。
pmSymbol 默认为 下午。
在 en_US 本地化下,
amSymbol 默认为 AM。
pmSymbol 默认为 PM。

在 dateFormat 中输入a时会匹配amSymbol或pmSymbol的内容,输入多个a无影响。

quarterSymbols 和 standaloneQuarterSymbols 默认为 ["第一季度", "第二季度", "第三季度", "第四季度"]。
shortQuarterSymbols 和 shortStandaloneQuarterSymbols 默认为 ["1季度", "2季度", "3季度", "4季度"]。
在 en_US 本地化下,
quarterSymbols 和 standaloneQuarterSymbols 默认为 ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]。
shortQuarterSymbols 和 shortStandaloneQuarterSymbols 默认为 ["Q1", "Q2", "Q3", "Q4"]。

在 dateFormat 中输入q、Q时,会匹配无前导零的数字。
输入qq、QQ时,会匹配有前导零的数字。
输入qqq时,会匹配 shortStandaloneQuarterSymbols 的内容。
输入qqqq时,则会匹配 standaloneQuarterSymbols 的内容。
输入QQQ时,则会匹配 shortQuarterSymbols 的内容。
输入QQQQ时,则会匹配 quarterSymbols 的内容。

以上是关于swift DateFormatter的主要内容,如果未能解决你的问题,请参考以下文章

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别

swift swift_extension5.swift

swift swift_optional4.swift