NSDate+currentDate.m 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. //
  2. // NSDate+currentDate.m
  3. // RDSmartPlug
  4. //
  5. // Created by Rayson on 2020/5/28.
  6. // Copyright © 2020 RDIOT. All rights reserved.
  7. //
  8. #import "NSDate+currentDate.h"
  9. @implementation NSDate (currentDate)
  10. + (NSDate *)currentDate{
  11. NSDate *date = [NSDate date];// NSDate默认相对的时区是GMT, 即: 格林威治标准时间
  12. NSTimeZone *zone = [NSTimeZone systemTimeZone];
  13. NSTimeInterval interval = [zone secondsFromGMTForDate:date];
  14. NSDate *current = [date dateByAddingTimeInterval:interval];
  15. return current;
  16. }
  17. // 时间戳—>字符串时间
  18. + (NSString *)rds_timeStringFromTimestamp:(NSString *)timestamp{
  19. //时间戳转时间的方法
  20. NSDate *timeDate = [NSDate dateWithTimeIntervalSince1970:[timestamp integerValue]];
  21. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  22. //[dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm"];
  23. [dateFormatter setDateFormat:@"HH:mm:ss"];
  24. NSString *strTime = [dateFormatter stringFromDate:timeDate];
  25. return strTime;
  26. }
  27. + (NSString *)rds_timeStringFromNSDate:(NSDate *)date{
  28. if (date == nil) {
  29. return @"——";
  30. }
  31. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  32. if ([NSDate is12HourFormat]) {
  33. [dateFormatter setDateFormat:@"hh:mm a"];
  34. }else{
  35. [dateFormatter setDateFormat:@"HH:mm"];
  36. }
  37. NSString *strTime = [dateFormatter stringFromDate:date];
  38. return strTime;
  39. }
  40. + (NSString *)rds_getDayString{
  41. NSArray * arrWeek=[NSArray arrayWithObjects:@"星期日",@"星期一",@"星期二",@"星期三",@"星期四",@"星期五",@"星期六", nil];
  42. NSDate *date = [NSDate date];
  43. NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  44. NSDateComponents *comps = [[NSDateComponents alloc] init];
  45. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday;
  46. comps = [calendar components:unitFlags fromDate:date];
  47. int week = (int)[comps weekday];
  48. int month = (int)[comps month];
  49. int day = (int)[comps day];
  50. NSString *w = [arrWeek objectAtIndex:week-1];
  51. NSString *time = [NSString stringWithFormat:@"%d.%d %@", month,day,w];
  52. return time;
  53. }
  54. + (NSDate *)rds_dateFromTimeString:(NSString *)timeString{
  55. timeString = [NSString stringWithFormat:@"%@:00",timeString];
  56. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  57. [dateFormatter setDateFormat:@"HH:mm:ss"];
  58. [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
  59. NSDate *date = [dateFormatter dateFromString:timeString];
  60. return date;
  61. }
  62. + (NSDate *)rds_dateFromTimestamp:(NSString *)timestamp{
  63. //时间戳转时间的方法
  64. NSDate *timeDate = [NSDate dateWithTimeIntervalSince1970:[timestamp integerValue]];
  65. return timeDate;
  66. }
  67. + (BOOL)isSameDay:(NSDate *)date1 date2:(NSDate *)date2{
  68. NSCalendar *calendar = [NSCalendar currentCalendar];
  69. calendar.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
  70. int unit = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear ;
  71. //1.
  72. NSDateComponents *date1Cmps = [calendar components:unit fromDate:date1];
  73. //2.
  74. NSDateComponents *date2Cmps = [calendar components:unit fromDate:date2];
  75. BOOL resule = (date1Cmps.year == date2Cmps.year) && (date1Cmps.month == date2Cmps.month) && (date1Cmps.day == date2Cmps.day);
  76. return resule;
  77. }
  78. + (BOOL)isSameMinute:(NSDate *)date1 date2:(NSDate *)date2{
  79. NSCalendar *calendar = [NSCalendar currentCalendar];
  80. int unit = NSCalendarUnitHour | NSCalendarUnitMinute;
  81. calendar.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
  82. if (![NSDate isSameDay:date1 date2:date2]) {
  83. return NO;
  84. }
  85. //1.
  86. NSDateComponents *date1Cmps = [calendar components:unit fromDate:date1];
  87. //2.
  88. NSDateComponents *date2Cmps = [calendar components:unit fromDate:date2];
  89. return (date1Cmps.hour == date2Cmps.hour) && (date1Cmps.minute == date2Cmps.minute);
  90. }
  91. + (BOOL)isDateInToday:(NSDate *)date{
  92. if(!date) return NO;
  93. NSCalendar *calendar = [NSCalendar currentCalendar];
  94. calendar.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
  95. BOOL today = [calendar isDateInToday:date];
  96. return today;
  97. }
  98. + (NSString *)rds_getTimestamp:(NSDate *)date{
  99. int second = [date timeIntervalSince1970];
  100. NSString *timestamp = [NSString stringWithFormat:@"%d", second];
  101. return timestamp;
  102. }
  103. + (NSString *)rds_getZeroTime:(NSDate *)date{
  104. NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  105. NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
  106. [greCalendar setTimeZone: timeZone];
  107. NSDateComponents *dateComponents = [greCalendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
  108. // 定义一个NSDateComponents对象,设置一个时间点
  109. NSDateComponents *dateComponentsForDate = [[NSDateComponents alloc] init];
  110. [dateComponentsForDate setDay:dateComponents.day];
  111. [dateComponentsForDate setMonth:dateComponents.month];
  112. [dateComponentsForDate setYear:dateComponents.year];
  113. [dateComponentsForDate setHour:0];
  114. [dateComponentsForDate setMinute:0];
  115. [dateComponentsForDate setSecond:0];
  116. NSDate *resultDate = [greCalendar dateFromComponents:dateComponentsForDate];
  117. int second = [resultDate timeIntervalSince1970];
  118. NSString *timestamp = [NSString stringWithFormat:@"%d", second];
  119. return timestamp;
  120. }
  121. + (NSString *)rds_getEndTime:(NSDate *)date{
  122. NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  123. NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
  124. [greCalendar setTimeZone: timeZone];
  125. NSDateComponents *dateComponents = [greCalendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
  126. // 定义一个NSDateComponents对象,设置一个时间点
  127. NSDateComponents *dateComponentsForDate = [[NSDateComponents alloc] init];
  128. [dateComponentsForDate setDay:dateComponents.day];
  129. [dateComponentsForDate setMonth:dateComponents.month];
  130. [dateComponentsForDate setYear:dateComponents.year];
  131. [dateComponentsForDate setHour:23];
  132. [dateComponentsForDate setMinute:59];
  133. [dateComponentsForDate setSecond:59];
  134. NSDate *resultDate = [greCalendar dateFromComponents:dateComponentsForDate];
  135. int second = [resultDate timeIntervalSince1970];
  136. NSString *timestamp = [NSString stringWithFormat:@"%d", second];
  137. return timestamp;
  138. }
  139. + (NSDate *)rds_firstDayOfMonth:(NSDate *)date{
  140. NSCalendar *calendar = [NSCalendar currentCalendar];
  141. NSDateComponents *componentsCurrentDate =[calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date];
  142. NSDateComponents *componentsNewDate = [NSDateComponents new];
  143. componentsNewDate.year = componentsCurrentDate.year;
  144. componentsNewDate.month = componentsCurrentDate.month;
  145. componentsNewDate.day = 1;
  146. return [calendar dateFromComponents:componentsNewDate];
  147. }
  148. + (NSDate *)rds_lastDayOfMonth:(NSDate *)date{
  149. NSInteger lastDay = [NSDate countThisMonthDays:date];
  150. NSCalendar *calendar = [NSCalendar currentCalendar];
  151. NSDateComponents *componentsCurrentDate =[calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date];
  152. NSDateComponents *componentsNewDate = [NSDateComponents new];
  153. componentsNewDate.year = componentsCurrentDate.year;
  154. componentsNewDate.month = componentsCurrentDate.month;
  155. componentsNewDate.day = lastDay;
  156. return [calendar dateFromComponents:componentsNewDate];
  157. }
  158. + (NSInteger)countThisMonthDays:(NSDate *)date{
  159. NSCalendar * calendar = [NSCalendar currentCalendar];
  160. if (isEmptyString(date)) {
  161. date = [NSDate date];
  162. }
  163. NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
  164. return range.length;
  165. }
  166. + (BOOL)is12HourFormat{
  167. NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
  168. NSRange containsA =[formatStringForHours rangeOfString:@"a"];
  169. BOOL hasAMPM =containsA.location != NSNotFound;
  170. return hasAMPM;
  171. }
  172. - (NSString *)rds_getMinute{
  173. NSCalendar *calendar = [NSCalendar currentCalendar];
  174. NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:self];
  175. NSInteger hour = [components hour];
  176. NSInteger minute = [components minute];
  177. NSString *min = [NSString stringWithFormat:@"%ld", hour*60 + minute];
  178. return min;
  179. }
  180. + (NSString *)rds_getTimeStringFromMinute:(NSString *)min{
  181. int h = min.intValue/60;
  182. int m = min.intValue%60;
  183. NSString *time = [NSString stringWithFormat:@"%02d:%02d", h, m];
  184. return time;
  185. }
  186. @end