iOS开发-日期转换那些事 NSDateFormatter

NSDateFormatter转换格式

纪元

  • g 显示朱利安日数(距离公元前4713年1月1日起的天数)
  • G 显示时代/纪元字符串(比如 A.D.或公元)

  • y 显示不带前导零的年份(2009、2019)
  • yy 显示带前导零的年份后两位(09、19)
  • yyy 显示四位数字年份(2009、2019)
  • yyyy 显示四位数字年份(2009、2019)
  • Y / YY / YYY / YYYY 格式与上面一致,只是将这一年中第一周的周日当作今年的第一天,所以慎重使用。

  • M/L 显示不带前导零的月份(1、12)
  • MM/LL 显示带前导零的月份(01、12)
  • MMM/LLL 显示为缩写形式的月份(根据语言显示为1月或Jan)
  • MMMM/LLLL 显示完整形式的月份(根据语言显示为一月或January)
    • 1月 一月 Jan January
    • 2月二月 Feb February
    • 3月 三月 Mar March
    • 4月 四月 Apr April
    • 5月 五月 May May
    • 6月 六月 Jun June
    • 7月 七月 Jul July
    • 8月 八月 Aug August
    • 9月 九月 Sep September
    • 10月 十月 Oct October
    • 11月 十一月 Nov November
    • 12月 十二月 Dec December

  • d 显示不带前导零的日期(1、12)
  • dd 显示带前导零的日期(01、12)

第几天

  • D 显示当前日期是这一年的第几天,不带前导零(5、65、351)
  • DD 显示当前日期是这一年的第几天,带前导零(05、65、351)
  • DDD 显示当前日期是这一年的第几天,带前导零 (005、065、351)

星期

  • e/c 显示当前日期是这一周的第几天,不带前导零 (周四为5,因为以周天为1开始算)
  • ee/cc 显示当前日期是这一周的第几天,带前导零 (05)
  • eee/E/EE/EEE/ccc 显示当前日期是周几 (周四、Thu)
  • eeee/EEEE/cccc 显示当前日期是星期几 (星期四、Thursday)

小时

  • h/K 根据设置12/24小时制显示为不带前导零的小时数字 (12小时制的下午四点:4、24小时制的下午四点:16)
  • hh/KK 根据设置12/24小时制显示为带前导零的小时数字 (12小时制的下午四点:04、24小时制的下午四点:16)
  • H/k 使用24小时制显示为不带前导零的小时数字
  • HH/kk 使用24小时制显示为带前导零的小时数字

分钟

  • m 将分钟显示为不带前导零的数字
  • mm  将分钟显示为带前导零的数字

  • s 将秒显示为不带前导零的数字
  • ss 将秒显示为带前导零的数字

上午、下午

  • a 显示上午/下午、AM/PM

时区

  • z/zz/zzz 显示不带前导零的GMT时区偏移量(GMT+8)
  • zzzz 显示指定GMT时区的名称(中国标准时间)
  • Z/ZZ/ZZZ 显示如 +0800 
  • ZZZZ 显示如 GMT+08:00

季度

  • q/Q 显示当前是第几季度(1、4)
  • qq/QQ 显示当前是第几季度(01、04)
  • qqq/QQQ 显示当前是第几季度(1季度、Q1)
  • qqqq/QQQQ 显示当前是第几季度(第一季度、1st quarter)

其他

  • A 该时间是那天的第几微秒
  • F/W 显示当前星期为当前月的第几周,范围为1~5。
  • w 显示当前是这一年的第几周,不带前导零(一周的开始为周日,第一周从去年的最后一个周日起算)
  • ww 显示当前是这一年的第几周,带前导零

NSDateFormatter性能优化

Creating a date formatter is not a cheap operation. If you are likely to use a formatter frequently, it is typically more efficient to cache a single instance than to create and dispose of multiple instances. One approach is to use a static variable.

创建 NSDateFormatter 并不便宜,如果经常使用,则缓存单个实例通常比创建和释放多个实例更高效,可以使用静态变量。

过度的创建 NSDateFormatter 用于 NSDate 和 NSString 之间转换,可能会导致 App 卡顿,打开 Profile 工具查一下性能,你会发现这种操作占用 CPU 使用率是非常高的。

如果使用频繁,那么建议缓存单例,就能提高效率。

static NSDateFormatter *dateFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    dateFormatter = [[NSDateFormatter alloc] init];
});

自己实现的日期工具类:https://github.com/SunSatan/SSDateHelper

猜你喜欢

转载自blog.csdn.net/qq_36557133/article/details/99671890