date swift_sqlite swift date - CSDN
  • SwiftDate日期库使用详解

    千次阅读 2019-07-01 17:18:33
    SwiftDate日期库使用详解 一、基本介绍 1、什么是SwiftDate? (1) SwiftDate是一个使用Swift语言编写的Date的封装库,使用它可以很方便的对日期进行处理,方便我们工程对日期显示的格式需求。 (2) SwiftDate功能...

    SwiftDate日期库使用详解

    一、基本介绍

    1、什么是SwiftDate?

    (1) SwiftDate是一个使用Swift语言编写的Date的封装库,使用它可以很方便的对日期进行处理,方便我们工程对日期显示的格式需求。

    (2) SwiftDate功能强大,本身swift相对Objective-C,语法上就要简单很多,操作起来更简单易懂,无论是简单的日期操作,还是复杂的业务逻辑都能满足。如如:

    • 支持数学运算进行日期计算(通过两个日期的+,-操作)
    • 支持比较运算符(通过两个日期的>,<,>=,<=,==)
    • 快速获取日期的部分内容(比如获取一个日期中的年份,月份,日)
    • 提供一系列.toString()方法
    • 提供简便的方法获取(比如:今天,昨天,明天等)

    2、安装使用

    (1)使用cocoaPods安装(备注: GitHub 上下载最新的代码:https://github.com/malcommac/SwiftDate

    pod 'SwiftDate', '~> 6.0.3'
    

    (2)在需要使用SwiftDate的地方,import进来就可以了

    import SwiftDate
    

    二、主要概念、主要类

    DateInRegion 和 Region

    SwiftDate为了提供完整的时间和日期管理的功能,引入了两个重要的新玩意以及相应扩展。

    第一个是一个结构体(struct),称为Region:region,它是对一个地理位置在时间体系中的描述,其中包含三个不同的特征:

    • TimeZone:用来定义时区。时区在一定程度上表示了不同地区,因此,地区的名字的可作为时区的名称,例如夏威夷时区,北京时间。类似的,格林尼治时间(GMT)或美国西部时间(PST)的偏移量, 也可以用来表示时区,例如东八区(GMT +8)
    • Calendar: 用来表示日历体系,日历体系定义了年与月的长度与划分。SwiftDate 提供了不同日历的信息,还支持不同日历下时间的计算,例如给出绝对时间值,SwiftDate 可以确定他在指定日历系统下的日期。
    • local: 用来表示当地的时间表述方式。由于各地的文化、语言、规范的不同,时间在各地用不同的分隔符或语法来表示。比如 中国地区一般采用 年-月-日 时:分:表,而美国地区多采用 月-日-年 时:分:秒

    另一个是DateInRegion,是在特定的国家地区 Region 下,描述一个自身与具体时区和日历无关的时间Date。这是由于特定的国家地区一般采用固定的时区、日历系统与表述规范,只要声明了国家地区,就包含了以上三个要素。实际应用中,使用DateInRegion可以方便的操作上下文中的日期。

    SwiftDate 为您提供相同的函数和属性,以管理带有地区属性的DateInRegion时间实例 和 单纯Date时间实例。

    三、基本用法

    1. 时间字符串 转 Date(支持任何格式)

       let date = "2019-06-27 14:30:30".toDate()
       print("date:\(date!.date)")
       
       let date1 = "2019-06-27 14:30".toDate("yyyy-MM-dd HH:mm")
       print("date1:\(date1!.date)")
      

      执行结果

      在这里插入图片描述

    2. 创建Date的方式

       let date2 = DateInRegion("2019-06-27 14:30:30")!
       print("date2:\(date2.date)")
       
       let date3 = DateInRegion(seconds: 342000);
       print("date3:\(date3.date)")
      
       let region = Region()
       let date4 = DateInRegion(components: {
           $0.year = 2019
           $0.month = 6
           $0.day = 27
           $0.hour = 14
           $0.minute = 30
       }, region: region)
       print("date4:\(date4!.date)")
      
       let date5 = DateInRegion(year: 2019, month: 6, day: 27, hour: 14, minute: 30, second: 30, nanosecond: 0, region: region)
       print("date5:\(date5.date)")
      

      执行结果

      在这里插入图片描述

    3. 对日期的操作:取一个日期的年、月、日、时、分秒等

       let date6 = Date()
       print("date6:\(date6)")
       print("date6:\(date6.year)")
       print("date6:\(date6.month)")
       print("date6:\(date6.day)")
       print("date6:\(date6.hour)")
       print("date6:\(date6.minute)")
       print("date6:\(date6.second)")
       print("date6 本月名称:\(date6.monthName(.default))")
       print("date6 本日名称:\(date6.weekdayName(.default))")
       print("date6 本周第一天:\(date6.firstDayOfWeek)")
       print("date6 本周最后一天:\(date6.lastDayOfWeek)")
      

      执行结果
      在这里插入图片描述

    4. 对日期的加减操作(获取几天前的日期或者几天后的日期)

       let date7 = Date()
       print("date7:\(date7)")
      
       let date8 = date7 + 1.years + 1.months + 1.days
       let date9 = date7 - 1.years - 2.months - 3.days - 4.hours
       
       print("date8:\(date8)")
       print("date9:\(date9)")
       
       let date10 = date8 - date9;
       print("date10:\(date10.year!)年\(date10.month!)月\(date10.day!)日")
      

      执行结果

      在这里插入图片描述

    5. 日期比较 (>,<,>=,<=,==,!=)

       print("\(date9 > date8)")
       print("\(date9 > date7)")
       print("\(date8 >= date7)")
      

      执行结果

      在这里插入图片描述

    6. 日期的粒度比较(是否童年,同月、同天等)

       let date11 = "2017-12-12 10:30:00".toDate()!.date
       let date12 = "2018-12-01 11:30:00".toDate()!.date
       let date13 = "2018-12-08 10:30:00".toDate()!.date
       print("日期11:\(date11)")
       print("日期12:\(date12)")
       print("日期13:\(date13)")
       
       let result = date11.compare(toDate: date12, granularity: .month) == .orderedSame
       let result2 = date12.compare(toDate: date13, granularity: .month) == .orderedSame
      
       print("result:\(result)")
       print("result2:\(result2)")
      
       let result3 = date11.isBeforeDate(date12, orEqual: false, granularity: .year)
       let result4 = date11.isBeforeDate(date12, granularity: .month)
       
       print("result3:\(result3)")
       print("result4:\(result4)")
      
       let result5 = date12.isAfterDate(date13, granularity: .month)
       let result6 = date13.isAfterDate(date11, granularity: .year)
       
       print("result5:\(result5)")
       print("result6:\(result6)")
      
       
       //不指定粒度
       let result7 = date12.isInRange(date: date11, and: date13) //true
       
        let result8 = date12.isInRange(date: date11, and: date13, orEqual: true, granularity: .day) //true
        print("result7:\(result7)")
        print("result8:\(result8)")
      

      执行结果

    在这里插入图片描述

    7.常用日期比较

        let date14 = Date("2018-06-24 14:40")!.date
        print("")
        print("测试日期时间:", date14)
        print("")
        print("该日期时间是否是早上:", date14.compare(.isMorning))
        print("该日期时间是否是下午:", date14.compare(.isAfternoon))
        print("该日期时间是否是傍晚:", date14.compare(.isEvening))
        print("该日期时间是否是夜里:", date14.compare(.isNight))
        print("")
        print("该日期时间是否是今天:", date14.compare(.isToday))
        print("该日期时间是否是明天:", date14.compare(.isTomorrow))
        print("该日期时间是否是昨天:", date14.compare(.isYesterday))
        print("该日期时间是否是工作日:", date14.compare(.isWeekday))
        print("该日期时间是否是周末:", date14.compare(.isWeekend))
        print("该日期时间是否是过去的:", date14.compare(.isInThePast))
        print("该日期时间是否是将来的:", date14.compare(.isInTheFuture))
        print("")
        print("该日期时间是否是本周:", date14.compare(.isThisWeek))
        print("该日期时间是否是下周:", date14.compare(.isNextWeek))
        print("该日期时间是否是上周:", date14.compare(.isLastWeek))
        print("")
        print("该日期时间是否是今年:", date14.compare(.isThisYear))
        print("该日期时间是否是明年:", date14.compare(.isNextYear))
        print("该日期时间是否是去年:", date14.compare(.isLastYear))
    

    执行结果

    在这里插入图片描述

    8.日期排序

        let dates = ["2018-11-22 22:30:00".toDate()!,
                     "2017-11-01 01:30:00".toDate()!,
                     "2019-11-01 10:30:00".toDate()!]
        
        print("排序前:\(dates)")
        print("降序排序:\(DateInRegion.sortedByNewest(list: dates))")
        print("升序排序:\(DateInRegion.sortedByOldest(list: dates))")
        
        print("\(DateInRegion.oldestIn(list: dates)!.date)")
        print("\(DateInRegion.newestIn(list: dates)!.date)")
    

    执行结果

    在这里插入图片描述

    四、使用场景

    营养秤新项目,我们改用使用swift开发,我们希望在项目中能够轻松自如的管理日期和时区,所以就使用到了SwiftDate这个库,有了“它”在swift里面就可以优雅的处理时间

    展开全文
  • SwiftDate, Swift,管理日期和时区的最佳方法 这就是我们做SwiftDate的原因,也许是管理Swift日期和时间的最好方法。为下一个项目选择 SwiftDate,或者迁移到你的现有项目中,你会满意 !★★星系我们的github存储库...
  • swift4.0 String与Date的相互转换

    万次阅读 2018-03-13 10:48:00
    /// Date类型转化为日期字符串 /// /// - Parameters: /// - date: Date类型 /// - dateFormat: 格式化样式默认“yyyy-MM-dd” /// - Returns: 日期字符串 static func dateConvertString(date:Date, ...
    /// Date类型转化为日期字符串
        ///
        /// - Parameters:
        ///   - date: Date类型
        ///   - dateFormat: 格式化样式默认“yyyy-MM-dd”
        /// - Returns: 日期字符串
        static func dateConvertString(date:Date, dateFormat:String="yyyy-MM-dd") -> String {
            let timeZone = TimeZone.init(identifier: "UTC")
            let formatter = DateFormatter()
            formatter.timeZone = timeZone
            formatter.locale = Locale.init(identifier: "zh_CN")
            formatter.dateFormat = dateFormat
            let date = formatter.string(from: date)
            return date.components(separatedBy: " ").first!
        }

      /// 日期字符串转化为Date类型
        ///
        /// - Parameters:
        ///   - string: 日期字符串
        ///   - dateFormat: 格式化样式,默认为“yyyy-MM-dd HH:mm:ss”
        /// - Returns: Date类型
        static func stringConvertDate(string:String, dateFormat:String="yyyy-MM-dd HH:mm:ss") -> Date {
            let dateFormatter = DateFormatter.init()
            dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            let date = dateFormatter.date(from: string)
            return date!
        }

    如果后端时间字段返回格式为"2018-01-29 00:00:00",而前端需要只展示为年月日格式(如:2018-01-29)

    则可以这样使用

    // 转化成格式化后的日期字符串
        private func convertDateString(string: String) -> String{
            let date = Util.stringConvertDate(string: string)
            let tempString = Util.dateConvertString(date: date)
            return tempString
        }

    展开全文
  • swift-Date时间比较

    千次阅读 2018-05-08 16:50:47
    let date1 = Date() let date2 = Date() // date1 &lt; date2 升序排列 if date1?.compare(date2!) == .orderedAscending { print("&lt;") } //date1 = date2 相等 if date1?.compare(date2!) ==...
    let date1 = Date()
    let date2 = Date()
    // date1 < date2 升序排列
    if date1?.compare(date2!) == .orderedAscending
    {
          print("<")
    }
    //date1 = date2 相等
    if date1?.compare(date2!) == .orderedSame
    {
          print(" = ")
    }  
    //降序排列的 date1 > date2 降序排列
    if date1?.compare(date2!) == .orderedDescending
    {
        print("<")
    }
    展开全文
  • swift数据持久化--归档

    2019-06-17 18:13:30
    2019独角兽企业重金招聘Python工程师标准>>> ...

    在数据存储上比较常用,下面给大家简单介绍一下归档:

          一般情况下我们先从网络上获取json数据,然后简历数据模型,最后将数据模型存储,但是归档不是所有的数据类型都可以存储,归档存储的类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary五种类型,如果不能归档,我们可以尝试转化为这五种中的任何一种再进行存储

    //这里要遵守nscoding协议
    class UserData: NSObject , NSCoding {
    
        var expires_Date:NSDate?
        var uid:String?
        var avatar_large: String?
        var screen_name: String?
        
        // 1.0用字典初始化模型
        init(dict:[String:AnyObject]) {
            super.init()
            setValuesForKeysWithDictionary(dict)
        }
        //如果字典中又缺少值的情况不会报错
        override func setValue(value: AnyObject?, forUndefinedKey key: String) {
            print(key)
        }
        
        
        //MARK: NACODING协议
        //2.0 将对象写入到文件中
        func encodeWithCoder(aCoder: NSCoder)
        {
            aCoder.encodeObject(access_token, forKey: "access_token")
            aCoder.encodeObject(expires_in, forKey: "expires_in")
            aCoder.encodeObject(uid, forKey: "uid")
            aCoder.encodeObject(expires_Date, forKey: "expires_Date")
        }
        //3.0 从文件中读取对象
        required init?(coder aDecoder: NSCoder)
        {
            access_token = aDecoder.decodeObjectForKey("access_token") as? String
            expires_in = aDecoder.decodeObjectForKey("expires_in") as? NSNumber
            uid = aDecoder.decodeObjectForKey("uid") as? String
            expires_Date = aDecoder.decodeObjectForKey("expires_Date") as? NSDate
        }
        
        //下面定义两个方法供外部使用
        
       //4.0 保存授权模型 
        func saveAccount()
        {
            let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
            let filePath = (path as NSString).stringByAppendingPathComponent("user.plist")
            print("filePath \(filePath)")
            NSKeyedArchiver.archiveRootObject(self, toFile: filePath)
        }
        
        //5.0 加载授权模型
        class func loadAccount() -> UserAccount? {
            let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
            let filePath = (path as NSString).stringByAppendingPathComponent("user.plist")
            print("filePath \(filePath)")
    
            let account =  NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? UserAccount
            return account
        }



    转载于:https://my.oschina.net/ShangGuanchen/blog/634159

    展开全文
  • Swift Date转String

    千次阅读 2017-03-01 18:23:04
    Swift3.0下 1.获取当前时间并转成字符串 func dateNowAsString() -> String { let nowDate = Date() let timeZone = TimeZone.init(identifier: "UTC") let formatter = DateFormatter() for
  • swift 类型转换

    千次阅读 2015-06-26 23:47:09
    1.获取当前时间 var curDate = NSDate() var dateFormatter = NSDateFormatter() var timeFormatter = NSDateFormatter() dateFormatter.dateFormat = “yyy-MM-dd” timeFormatter.dateFormat = “HH:mm:ss ...
  • Swift 对比两个 Date 之间相差天数

    千次阅读 2018-05-29 09:52:28
    /// DateTools.swift import Foundation extension Date { func daysBetweenDate(toDate: Date) -&gt; Int { let components = Calendar.current.dateComponents([.day], from: self, to: toDate) ...
  • Swift4中对于日期时间的处理(Date、DateComponents、Calendar、DateFormatter、Locale) 说明 最近在做一些东西,涉及到了日期时间的处理,去网上查到的资料因为各种原因完全用不了,花费了一段时间解决了这个...
  • 1 字典转JSON字符串 ... var body = [ "date": “dates”,"time": timestring,"repeat" ] let data2 :Data! = try? JSONSerialization.data(withJSONObject: body, options: []) var JSONString = S...
  • SwiftDate 浅析

    2019-01-08 16:08:23
    SwiftDate是Github上开源的,使用Swift语言编写的NSDate封装库,可以很方便的在Swift中处理日期,比如日期创建,比较,输出等。 特性 支持数学运算符进行日期计算(比如myDate + 2.week + 1.hour) 支持比较...
  • 日期显示与处理是每个SwiftUI开发者都应该掌握的技能,其中Date、Calendar和DateFormatter是日期处理最常用的三个组件。下面让我们来看看他们三个都有什么用: Date 获取时间的类型 Date类型主要用于获取日期与...
  • 获取指定年月的date 时间字符串转date 计算天数差 比较时间先后 将时间转换为时间戳 将时间戳转换为年月日 将时间戳转换为具体时间 将时间戳转换为时分秒 获取系统的当前时间戳 月份数字转汉字 数字前补0 NSDate ...
  • SwiftDate GitHub:https://github.com/malcommac/SwiftDate SwiftDate 中文文档:https://www.jianshu.com/p/1b6e8a764800 CocoaPods pod 'SwiftDate' YLDatePicker GitHub:...
  • Swift获取当前时间

    2018-12-17 12:28:45
    extension Date { static func getCurrentTime() -&amp;gt; Int64 { let now = Date() let timeInterval: TimeInterval = now.timeIntervalSince1970 return Int64(timeInterval) ...
  • swift 时间戳转为date (unix)

    千次阅读 2015-06-08 11:47:01
    swift 时间戳转为date (unix)
  • SwiftDate、DateFormatter、DateComponents、Locale 之间的关系说明 前言 理解这些类之间的关系,和这些类是干嘛的,对处理时间来说很重要 类名 说明 注意 Date 只是表示时间的一个数据,只表示时间节点...
  • swift之日历NSCalender、日期Date

    千次阅读 2019-01-09 17:49:50
    参考:... /** 时间Date、日历 */ import UIKit class LYBCalenderAndDateExtention: NSObject { ... // 获取当前系统时间,转换成字符串 func dateTodateStr(date:Date)-&gt;(String)...
  • SwiftUI日期之计算两个日期间隔多少天(Date DatePicker) SwiftUI日期之如何计算N天后具体日期 SwiftUI实战之日期日历年月日星期天干地支十二时辰时分秒 SwiftUI实战之如何显示中文日期选择器datepicker 推荐文章 ...
  • swift通过类扩展给date增加方法
1 2 3 4 5 ... 20
收藏数 7,120
精华内容 2,848
关键字:

date swift