• Swift开发技巧:NSDate(格式转换、封装、单例)


    几乎每一个app都会有时间显示这一功能,但这一功能相对于其他的功能逻辑来说只是九牛一毛。那如何高效的搞定这一不重要但又必须实现的功能,是你提升逼格的一个基础点。提高逼格,从下面内容开始:

    思路:
    - 创建一个世界管理类:DateFormatter
    - 给这个类实现一个单例:sharedFormatter
    - 给这个类添加对应时间格式类的属性:NSDateFormatter()
    - 初始化这些格式属性
    - 调用

    干货:

    第 1 步:创建一个世界管理类:DateFormatter

    class DateFormatter {}

    第 2 步:给这个类实现一个单例:sharedFormatter

    class DateFormatter {
          // 做成单例
          static let sharedFormatter = DateFormatter()
    }

    第 3 步:给这个类添加对应时间格式类的属性:NSDateFormatter()

     1 // 第一步
     2 class DateFormatter { 
     3      // 第二步 做成单例
     4       static let sharedFormatter = DateFormatter()
     5             
     6      // 第三步 时间格式属性:NSDateFormatter 类型
     7             
     8      let rfc3339 = NSDateFormatter() // 最全时间格式 ("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
     9             let completeDatetime = NSDateFormatter() // 年-月-日 周 时:分:秒("yyyy-MM-dd (EEE) HH:mm")
    10     
    11             let timeZH = NSDateFormatter() // 中式: 月 日 时 分 上下午("MMMd日 HH:mm a")
    12             let timeEN = NSDateFormatter() // 英式:周 月 日,时 分 上下午("EEE, MMM dd, HH:mm a")
    13             
    14             let timeDate = NSDateFormatter()   // 年-月-日("yyyy-MM-dd")
    15             let timeHour = NSDateFormatter()   // HH:mm("HH:mm")
    16             let timeMinute = NSDateFormatter() // HH:mm:ss("HH:mm:ss")
    17         }

    第 4 步:初始化这些格式属性

     1 // 第一步
     2         class DateFormatter { 
     3             // 第二步 做成单例
     4             static let sharedFormatter = DateFormatter()
     5             
     6             // 第三步 时间格式属性:NSDateFormatter 类型
     7             
     8             let rfc3339 = NSDateFormatter() // 最全时间格式 ("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
     9             let time = NSDateFormatter() // 年-月-日 周 时:分:秒("yyyy-MM-dd (EEE) HH:mm")
    10        
    11             let timeZH = NSDateFormatter() // 中式: 月 日 时 分 上下午("MMMd日 HH:mm a")
    12             let timeEN = NSDateFormatter() // 英式:周 月 日,时 分 上下午("EEE, MMM dd, HH:mm a")
    13             
    14             let timeDate = NSDateFormatter()   // 年-月-日("yyyy-MM-dd")
    15             let timeHour = NSDateFormatter()   // HH:mm("HH:mm")
    16             let timeMinute = NSDateFormatter() // HH:mm:ss("HH:mm:ss")
    17             
    18             // 第四步 初始化
    19             init() {
    20                 
    21                 rfc3339.locale     = NSLocale(localeIdentifier: "en_US_POSIX")  // 时间本地化
    22                 rfc3339.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"               // 格式
    23                 rfc3339.timeZone   = NSTimeZone(forSecondsFromGMT: 0)           // 时区
    24                 
    25                 // 不设置时间本地化,默认是手机系统的时间显示
    26                 time.dateFormat = "yyyy-MM-dd (EEE) HH:mm"
    27                 
    28                 timeZH.locale     = NSLocale(localeIdentifier: "zh_CN")
    29                 timeZH.dateFormat = "MMMd日 HH:mm a"
    30                 
    31                 timeEN.locale     = NSLocale(localeIdentifier: "en_US")
    32                 timeEN.dateFormat = "EEE, MMM dd, HH:mm a"
    33                 
    34                 timeDate.dateFormat   = "yyyy-MM-dd"
    35                 timeHour.dateFormat   = "HH:mm"
    36                 timeMinute.dateFormat = "HH:mm:ss"
    37                 
    38                 // 部分说明:"en_US_POSIX" 与 "en_US" 的选择
    39                 // "en_US_POSIX" 适用的范围比 "en_US"广,如果与后台交互让"字符串"与"时间"转换建议选择"en_US_POSIX"
    40                 // Apple 官网解释:“en_US_POSIX” is also invariant in time (if the US, at some point in the future, changes the way it formats dates, “en_US” will change to reflect the new behaviour, but “en_US_POSIX” will not), and between machines (“en_US_POSIX” works the same on iPhone OS as it does on Mac OS X, and as it it does on other platforms).
    41             }
    42         }

     第 5 步:应用

    // rfc3339 格式
                let str = DateFormatter.sharedFormatter.rfc3339.stringFromDate(NSDate())
                print(str) // "2016-08-17T14:38:51Z"
                
                // time
                let str = DateFormatter.sharedFormatter.time.stringFromDate(NSDate())
                print(str) // "2016-08-17 (Wed) 22:39"
                
                // timeZH
                let str = DateFormatter.sharedFormatter.timeZH.stringFromDate(NSDate())
                print(str) // "8月17日 22:39 下午"
                
                // timeEN
                let str = DateFormatter.sharedFormatter.timeEN.stringFromDate(NSDate())
                print(str) // "Wed, Aug 17, 22:40 PM"
                
                // timeDate
                let str = DateFormatter.sharedFormatter.timeDate.stringFromDate(NSDate())
                print(str) // "2016-08-17"
                
                // timeHour
                let str = DateFormatter.sharedFormatter.timeHour.stringFromDate(NSDate())
                print(str) // "22:40"
                
                // timeMinute
                let str = DateFormatter.sharedFormatter.timeMinute.stringFromDate(NSDate())
                print(str) // "22:40:58"
  • 相关阅读:
    Git在eclipse中的使用
    Git协同开发产生的版本冲突
    git&github-远程库的拉取
    【题解】p6160 [Cnoi2020]向量
    【题解】p2388 阶乘之乘
    友情链接
    O(1)求解自然数异或和
    【题解】uva1104 chips challenge
    【题解】p1809 过河问题
    多步操作产生错误,请检查每一步的状态
  • 原文地址:https://www.cnblogs.com/jfckliving/p/5836731.html
Copyright © 2020-2023  润新知