某天的那一年的第一天 最后一天
最近三天 最近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
}
}
网友评论