美文网首页
swift 时间的使用

swift 时间的使用

作者: 吉林天师 | 来源:发表于2019-05-23 00:49 被阅读0次

某天的那一年的第一天 最后一天

最近三天 最近7天 最近8天

某天的本月第一天,最后一天

某天的本周第一天,最后一天

参考的博客: https://www.jianshu.com/p/09ac9329cf8e https://blog.csdn.net/weixin_34388207/article/details/86451999
还有几个记不住了

   override func viewDidLoad() {
        super.viewDidLoad()

        //        //创建一个日期格式器
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
        
        //本周第一天日期
        let startDate = Date().startOfWeek
        print("本周开始时间:", dateFormatter.string(from: startDate))
        
        //本周最后一天日期1
        let endDate1 = Date().endOfWeek
        print("本周结束时间1:", dateFormatter.string(from: endDate1))
        
        //本周最后一天日期2
        let endDate2 = Date().endTimeOfWeek
        print("本周结束时间2:", dateFormatter.string(from: endDate2))
        
        
        
        debugPrint("本月",startOfCurrentMonth(),endOfCurrentMonth())
         debugPrint("本年",startOfCurrentYear(),endOfCurrentYear())
        
        
         debugPrint("本年字符串",startOfCurrentYearString(),endOfCurrentYearString())
         debugPrint("本月字符串",startOfCurrentMonthString(),endOfCurrentMonthString())
        
        self.oneDay()
        
    }
    func time1(){
        let date = Date()
        let dateFormat = DateFormatter()
        dateFormat.dateFormat = "yyyy-MM-dd HH:mm:ss"
        debugPrint(dateFormat.string(from: date))
        
        debugPrint("当前时间",date)
        
    }
    func time2(){
        let date = Date()
        let dateFormat = DateFormatter()
        dateFormat.dateFormat = "yyyy-MM-dd HH:mm:ss"
        debugPrint(dateFormat.string(from: date))
        
        debugPrint("当前时间",date)
        
        
        
        dateFormat.locale = NSLocale(localeIdentifier: "zh") as Locale
        debugPrint("CN",dateFormat.string(from: date))
        
        
        dateFormat.dateStyle = DateFormatter.Style.full
        debugPrint("Style.full",dateFormat.string(from: date))
        debugPrint("正确的当前时间",date)
        
        dateFormat.locale = Locale.current
        debugPrint("设备所在地",dateFormat.string(from: date))
        
        //如何将手动设置的各个时间成分转换为一个完整的日期时间
        
        //创建一个DateComponents对象
        var components = DateComponents.init()
        //设置各个时间成分
        components.year = 2018
        components.month = 1
        components.day = 10
        components.hour = 8
        components.minute = 0
        components.second = 0
        //创建一个转换桥梁
        let cal0 = Calendar.current
        //进行转换
        var newDate0 = cal0.date(from: components)
        //输出转换结果
        print("\(newDate0!)")//输出:"2018-01-10 00:00:00 +0000\n"
        
    }
    func time3(){
        let now = Date()
        
        //5分钟前的date
        let fiveMAgo = Date(timeIntervalSinceNow: -5 * 60)
        let fiveMLater = Date(timeIntervalSinceNow: 5 * 60)
        
        //相对于参考时间
        let first = Date(timeIntervalSinceReferenceDate: -875_602_800)
        let second = Date(timeIntervalSinceReferenceDate: 875_602_800)
        
        //获得一年的秒数
        let oneYear = TimeInterval(60 * 60 * 24 * 365)
        let new1971 = Date(timeIntervalSince1970: oneYear)
        let new1969 = Date(timeIntervalSince1970: -oneYear)
        
        //相对于指定时间
        let newYear = Date(timeInterval: oneYear, since: now)
        
    }

从时间字符串中获取日

    func time4(){
        //date -> string
        let myFormatter = DateFormatter()
        //这里有很多默认的日期格式
//        myFormatter.dateStyle = .long
//        //默认的时间格式
//        myFormatter.timeStyle = .long  //  none short medium long full
        
        myFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
       
        //date -> string
        myFormatter.string(from: Date())
        
        //string -> date
        let date = myFormatter.date(from: "2019-05-22 9:38:06")
        
        var userCalendar = Calendar.current
        userCalendar.identifier
        let zone:NSTimeZone? = NSTimeZone(name:"Asia/Shanghai")
        userCalendar.timeZone = zone! as TimeZone
        let dateComponents00 = userCalendar.dateComponents([.year,.month,.day], from: date!)
        debugPrint(dateComponents00.day)
        debugPrint(startOfThisWeekStyleString(),endOfThisWeek(returnEndTime: true))
        
    }

本周第一天日期 本周开始日期(星期天)

    func startOfThisWeek() -> Date {
        let date = Date()
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(
            Set<Calendar.Component>([.yearForWeekOfYear, .weekOfYear]), from: date)
        let startOfWeek = calendar.date(from: components)!
        return startOfWeek
    }

本周第一天日期字符串 开始日期(星期天)

    func startOfThisWeekStyleString() -> String{
        let date = Date()
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(
            Set<Calendar.Component>([.yearForWeekOfYear, .weekOfYear]), from: date)
        let startOfWeek = calendar.date(from: components)!
        
        let myFormatter = DateFormatter()
        myFormatter.dateFormat = "yyyy-MM-dd"
         var startString:String? = ""
         startString?.append(myFormatter.string(from:startOfWeek) as String)
         startString?.append(" 00:00:00")
        return startString ?? "0000-00-00 00:00:00"
    }

本周最后一天日期字符串 本周结束日期(星期六)

    func endOfThisWeekStyleString(returnEndTime:Bool = false) -> String {
        let calendar = NSCalendar.current
        var components = DateComponents()
        if returnEndTime {
            components.day = 7
            components.second = -1
        } else {
            components.day = 6
        }

本周最后一天日期 本周结束日期(星期六)

    func endOfThisWeek(returnEndTime:Bool = false) -> Date {
        let calendar = NSCalendar.current
        var components = DateComponents()
        if returnEndTime {
            components.day = 7
            components.second = -1
        } else {
            components.day = 6
        }
        
        let endOfMonth =  calendar.date(byAdding: components, to: startOfThisWeek())!
        return endOfMonth
    }
 
  
        
        let endOfMonth =  calendar.date(byAdding: components, to: startOfThisWeek())!
        
        let myFormatter = DateFormatter()
        myFormatter.dateFormat = "yyyy-MM-dd"
        var endOfMonthString:String? = ""
        endOfMonthString?.append(myFormatter.string(from:endOfMonth) as String)
        endOfMonthString?.append(" 23:59:59")
        
        return endOfMonthString ?? "0000-00-00 00:00:00"
    }
     ````  
    
    
###    //本年开始日期 字符串
func startOfCurrentYearString() -> String {
    let date = Date()
    let calendar = NSCalendar.current
    let components = calendar.dateComponents(Set<Calendar.Component>([.year]), from: date)
    
    var yearString = 0
    yearString = components.year!
    
    return String(format: "%d-01-01",yearString)
}
    /// 本年结束日期 字符串
func endOfCurrentYearString() -> String {
    let date = Date()
    let calendar = NSCalendar.current
    let components = calendar.dateComponents(Set<Calendar.Component>([.year]), from: date)
    var yearString = 0
    yearString = components.year!
    return String(format: "%d-12-31 23:59:59",yearString)
}
 /// 本月开始日期 字符串  
func startOfCurrentMonthString() -> String {
    let date = Date()
    let calendar = NSCalendar.current
    var components = calendar.dateComponents(
        Set<Calendar.Component>([.year, .month]), from: date)
    
    var startOfMonth:String = ""
    var  yearInt = 0
    yearInt = components.year!
    startOfMonth.append(String(format:"%d-",yearInt))
    var  monthInt = 0
    monthInt  = components.month!
   
    startOfMonth.append("")
    
   
    switch components.month {
    case 1,2,3,4,5,6,7,8,9:
         startOfMonth.append(String(format:"0%d-",monthInt))
    case 10,11,12:
        startOfMonth.append(String(format:"%d-",monthInt))
        break
    default:
        break
    }
    startOfMonth.append("01 00:00:00")
    return startOfMonth
}
 /// 本月结束日期 字符串
func endOfCurrentMonthString() -> String {
    let date = Date()
    let calendar = NSCalendar.current
    var components = calendar.dateComponents(
        Set<Calendar.Component>([.year, .month]), from: date)
    
    var startOfMonth:String = ""
    var  yearInt = 0
    yearInt = components.year!
    startOfMonth.append(String(format:"%d-",yearInt))
    var  monthInt = 0
    monthInt  = components.month!
    switch monthInt {
    case 1,2,3,4,5,6,7,8,9:
        startOfMonth.append(String(format:"0%d-",monthInt))
    case 10,11,12:
        startOfMonth.append(String(format:"%d-",monthInt))
        break
    default:
        break
    }
    
    switch monthInt {
    case 1,3,5,7,8,10,12:
        startOfMonth.append("31")
    case 4,6,9,11:
        startOfMonth.append("30")
        break
    case 2:
        if (yearInt % 4 == 0 || (yearInt % 400 == 0 && yearInt % 100 != 0))  {
            startOfMonth.append("29")
        }else{
            startOfMonth.append("28")
        }
        break
    default:
        break
    }
    startOfMonth.append(" 23:59:59")
    return startOfMonth
}
### 时区相关
 func timezone(){
     //https://blog.csdn.net/weixin_34388207/article/details/86451999
     // 根据时区名称创建
     let zone1:NSTimeZone? = NSTimeZone(name: "America/Chicago")
     
     // 根据时区缩写创建
     let zone2:NSTimeZone? = NSTimeZone(abbreviation: "EST")
     
     // 根据零时区的秒数偏移量创建,+28800 为 GMT+8,即北京时间(+8)
     let zone3:NSTimeZone = NSTimeZone(forSecondsFromGMT: +28800)
     
     // 设置默认的时区
   
     let defaultZone = NSTimeZone.default
     
     let systemZone = NSTimeZone.system
     
     // 本地时区可以被修改,而系统时区不能修改
     let localZone = NSTimeZone.local
     
     // NSCalendar 设置时区
     
     var calendar:Calendar = Calendar.current
     
     // 设置时区,设置为 GMT+8,即北京时间(+8) //Asia/Shanghai
     calendar.timeZone = NSTimeZone(abbreviation: "EST")! as TimeZone
     
     // 设置时区,设置为 GMT+8,即北京时间(+8)
     calendar.timeZone = NSTimeZone(forSecondsFromGMT: +28800) as TimeZone
     
     // NSDateFormatter 设置时区
     
     let formatter:DateFormatter = DateFormatter()
     
     formatter.timeZone = NSTimeZone(forSecondsFromGMT: +28800) as TimeZone
     
     // 获取系统时区
     let systemZone1 = NSTimeZone.system
     
     // 获取本地时区
     let localZone2 = NSTimeZone.local
     
     // 获取默认时区
     let defaultZone3 = NSTimeZone.default
     
     
     
     // 获取所有已知的时区名称
     let zoneNames = NSTimeZone.knownTimeZoneNames
     
     // 获取指定时区的名称
     let localZoneName = NSTimeZone.local.identifier
     


     // 获取所有已知的时区缩写
     let zoneAbbreviations = NSTimeZone.abbreviationDictionary
     
     // 获取指定时区的缩写
     let localZoneAbbreviation = NSTimeZone.local.abbreviation
     
     // 获取指定时间所在时区名称缩写
//        let dateLocalAbbreviation = NSTimeZone.local.abbreviationForDate(NSDate())
    
     let zone = NSTimeZone.local
     
     // 获取当前时区与零时区的间隔秒数
     let seconds1 = zone.secondsFromGMT
     
     // 获取指定时间所在时区与零时区的间隔秒数
//        let seconds2 = zone.secondsFromGMTForDate(NSDate())
     
     // 得到当前时间(世界标准时间 UTC/GMT)
     var date:NSDate = NSDate()
     
     // 设置系统时区为本地时区
     let zoneZ:NSTimeZone = systemZone as NSTimeZone
     
     
     
     // 计算本地时区与 GMT 时区的时间差
     let second:Int = zoneZ.secondsFromGMT
     
     // 在 GMT 时间基础上追加时间差值,得到本地时间
     date = date.addingTimeInterval(TimeInterval(second))
     

//Asia/Shanghai
 }

没有北京时区,北京时区叫做东八区,GTM+8 is Asia/Shanghai

//本月开始日期
    func startOfCurrentMonth() -> Date {
        let date = Date()
        let calendar = NSCalendar.current
        var components = calendar.dateComponents(
            Set<Calendar.Component>([.year, .month,.day,.hour]), from: date)
        components.hour = components.hour! + 8
        let startOfMonth = calendar.date(from: components)!
        return startOfMonth
    }
//本月结束日期
    func endOfCurrentMonth(returnEndTime:Bool = false) -> Date {
        let calendar = NSCalendar.current
        var components = DateComponents()
        components.month = 1
        if returnEndTime {
            components.second = -1
        } else {
            components.day = -1
        }
        
        let endOfMonth =  calendar.date(byAdding: components, to: startOfCurrentMonth())!
        return endOfMonth
    }
//本年开始日期
    func startOfCurrentYear() -> Date {
        let date = Date()
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(Set<Calendar.Component>([.year]), from: date)
        let startOfYear = calendar.date(from: components)!
        return startOfYear
    }
```

    //本年结束日期

```
    func endOfCurrentYear(returnEndTime:Bool = false) -> Date {
        let calendar = NSCalendar.current
        var components = DateComponents()
        components.year = 1
        if returnEndTime {
            components.second = -1
        } else {
            components.day = -1
        }
        
        let endOfYear = calendar.date(byAdding: components, to: startOfCurrentYear())!
        return endOfYear
    }
 ```

#### 某天的本周,本月,本年,的第一天,最后一天验证的地方    

```
  func oneDay(){
        let dayS = "2019-5-16 09:09:01"
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let date = dateFormatter.date(from: dayS)
        
        debugPrint("tomonth",self.startOfCurrentMonthStringForOneDay(date: date!))
        debugPrint("tomonth",self.endOfCurrentMonthStringForOneDay(date: date!))
        debugPrint("toyear",self.endOfCurrentYearStringForOneDay(date: date!))
        debugPrint("toyear",self.startOfCurrentYearStringForOneDay(date: date!))
        debugPrint("toweek",self.startOfThisWeekStyleStringForOneDay(date: date!))
        debugPrint("toweek",self.endOfThisWeekStyleString(date: date!,returnEndTime:true))
        
        debugPrint(self.LatelyNumberDayForOneday(latelyNum: 3))
        debugPrint(self.LatelyNumberDayForOneday(latelyNum: 24))
        debugPrint(self.LatelyNumberDayForOneday(latelyNum: 4, date: date!))
        time4()
    }

某天的本月第一天,最后一天

    func startOfCurrentMonthStringForOneDay(date:Date) -> String {
        
        let calendar = NSCalendar.current
        var components = calendar.dateComponents(
            Set<Calendar.Component>([.year, .month]), from: date)
        
        var startOfMonth:String = ""
        var  yearInt = 0
        yearInt = components.year!
        startOfMonth.append(String(format:"%d-",yearInt))
        var  monthInt = 0
        monthInt  = components.month!
        
        startOfMonth.append("")
        
        switch components.month {
        case 1,2,3,4,5,6,7,8,9:
            startOfMonth.append(String(format:"0%d-",monthInt))
        case 10,11,12:
            startOfMonth.append(String(format:"%d-",monthInt))
            break
        default:
            break
        }
        startOfMonth.append("01 00:00:00")
        return startOfMonth
    }

    func endOfCurrentMonthStringForOneDay(date:Date) -> String {
        let calendar = NSCalendar.current
        var components = calendar.dateComponents(
            Set<Calendar.Component>([.year, .month]), from: date)
        
        var startOfMonth:String = ""
        var  yearInt = 0
        yearInt = components.year!
        startOfMonth.append(String(format:"%d-",yearInt))
        var  monthInt = 0
        monthInt  = components.month!
        switch monthInt {
        case 1,2,3,4,5,6,7,8,9:
            startOfMonth.append(String(format:"0%d-",monthInt))
        case 10,11,12:
            startOfMonth.append(String(format:"%d-",monthInt))
            break
        default:
            break
        }
        
        switch monthInt {
        case 1,3,5,7,8,10,12:
            startOfMonth.append("31")
        case 4,6,9,11:
            startOfMonth.append("30")
            break
        case 2:
            if (yearInt % 4 == 0 || (yearInt % 400 == 0 && yearInt % 100 != 0))  {
                startOfMonth.append("29")
            }else{
                startOfMonth.append("28")
            }
            break
        default:
            break
        }
        startOfMonth.append(" 23:59:59")
        return startOfMonth
    }
### 某天的本周第一天,最后一天
    func startOfThisWeekStyleStringForOneDay(date:Date) -> String{
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(
            Set<Calendar.Component>([.yearForWeekOfYear, .weekOfYear]), from: date)
        let startOfWeek = calendar.date(from: components)!
        
        let myFormatter = DateFormatter()
        myFormatter.dateFormat = "yyyy-MM-dd"
        var startString:String? = ""
        startString?.append(myFormatter.string(from:startOfWeek) as String)
        startString?.append(" 00:00:00")
        return startString ?? "0000-00-00 00:00:00"
    }
    func endOfThisWeekStyleString(date:Date,returnEndTime:Bool = false) -> String {
        let calendar = NSCalendar.current
        var components = DateComponents()
        if returnEndTime {
            components.day = 7
            components.second = -1
        } else {
            components.day = 6
        }
        
        let endOfMonth =  calendar.date(byAdding: components, to: startOfThisWeekForOneDay(date:date))!
        
        let myFormatter = DateFormatter()
        myFormatter.dateFormat = "yyyy-MM-dd"
        var endOfMonthString:String? = ""
        endOfMonthString?.append(myFormatter.string(from:endOfMonth) as String)
        endOfMonthString?.append(" 23:59:59")
        
        return endOfMonthString ?? "0000-00-00 00:00:00"
    }
    func startOfThisWeekForOneDay(date:Date) -> Date {
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(
            Set<Calendar.Component>([.yearForWeekOfYear, .weekOfYear]), from: date)
        let startOfWeek = calendar.date(from: components)!
        return startOfWeek
    }
#### 某天的那一年的第一天  最后一天
    func endOfCurrentYearStringForOneDay(date:Date) -> String {
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(Set<Calendar.Component>([.year]), from: date)
        var yearString = 0
        yearString = components.year!
        return String(format: "%d-12-31 23:59:59",yearString)
    }
    func startOfCurrentYearStringForOneDay(date:Date) -> String {
        let calendar = NSCalendar.current
        let components = calendar.dateComponents(Set<Calendar.Component>([.year]), from: date)
        
        var yearString = 0
        yearString = components.year!
        return String(format: "%d-01-01 00:00:00",yearString)
    }

最近三天 最近7天 最近8天

    func LatelyNumberDayForOneday(latelyNum:Int,date:Date = Date()) -> String {
        let calendar = NSCalendar.current
        var components = calendar.dateComponents(Set<Calendar.Component>([.year,.month,.day]), from: date)
        components.day  = components.day! - latelyNum
        let latelyday =  calendar.date(from: components)
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        var  latelydayString = ""
        latelydayString =  dateFormatter.string(from: latelyday!)
        latelydayString.append(" 00:00:00")
        return  latelydayString
    }
}

相关文章

网友评论

      本文标题:swift 时间的使用

      本文链接:https://www.haomeiwen.com/subject/ocrmzqtx.html