ios时间相关的工具NSDate

短命女 2022-06-10 12:11 270阅读 0赞
  1. /获取年月日对象
  2. +(NSDateComponents *)getDateComponents:(NSDate *)date {
  3. NSCalendar *calendar = [NSCalendar currentCalendar];
  4. // [calendar setFirstWeekday:2]; //设置每周的开始是星期一
  5. // [calendar setMinimumDaysInFirstWeek:7]; //设置一周至少需要几天
  6. return [calendar components:
  7. NSYearCalendarUnit|
  8. NSMonthCalendarUnit|
  9. NSDayCalendarUnit|
  10. NSWeekOfYearCalendarUnit|
  11. NSQuarterCalendarUnit fromDate:date];
  12. }
  13. //获得某年的周数
  14. +(NSInteger)getWeek_AccordingToYear:(NSInteger)year {
  15. NSDateComponents *comps = [DataTimeTool getDateComponents:[DataTimeTool dateFromString:[NSString stringWithFormat:@"%ld-12-31",year] DateFormat:@"yyyy-MM-dd"]];
  16. NSInteger week = [comps weekOfYear];
  17. if (week == 1) {
  18. return 52;
  19. }else {
  20. return week;
  21. }
  22. }
  23. /**
  24. * 获取某年某周的范围日期
  25. *
  26. * @param year 年份
  27. * @param weekofYear year里某个周
  28. *
  29. * @return 时间范围字符串
  30. */
  31. +(NSString*)getWeekRangeDate_Year:(NSInteger)year WeakOfYear:(NSInteger)weekofYear
  32. {
  33. NSString *weekDate = @"";
  34. NSString *timeAxis = [NSString stringWithFormat:@"%ld-06-01 12:00:00",(long)year];
  35. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  36. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  37. NSDate *date = [dateFormatter dateFromString:timeAxis];
  38. NSCalendar *calendar = [NSCalendar currentCalendar];
  39. /**这两个参数的设置影响着周次的个数和划分*****************/
  40. [calendar setFirstWeekday:2]; //设置每周的开始是星期一
  41. // [calendar setMinimumDaysInFirstWeek:7]; //设置一周至少需要几天
  42. NSDateComponents *comps = [calendar components:(NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay)
  43. fromDate:date];
  44. //时间轴是当前年的第几周
  45. NSInteger todayIsWeek = [comps weekOfYear];
  46. if ([DataTimeTool getWeek_AccordingToYear:year] == 53) {
  47. todayIsWeek += 1;
  48. }
  49. //获取时间轴是星期几 1(星期天) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
  50. NSInteger todayIsWeekDay = [comps weekday];
  51. // 计算当前日期和这周的星期一和星期天差的天数
  52. //firstDiff 星期一相差天数 、 lastDiff 星期天相差天数
  53. long firstDiff,lastDiff;
  54. if (todayIsWeekDay == 1) {
  55. firstDiff = -6;
  56. lastDiff = 0;
  57. }else
  58. {
  59. firstDiff = [calendar firstWeekday] - todayIsWeekDay;
  60. lastDiff = 8 - todayIsWeekDay;
  61. }
  62. NSDate *firstDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*firstDiff sinceDate:date];
  63. NSDate *lastDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*lastDiff sinceDate:date];
  64. long weekdifference = weekofYear - todayIsWeek;
  65. firstDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*7*weekdifference sinceDate:firstDayOfWeek];
  66. lastDayOfWeek= [NSDate dateWithTimeInterval:24*60*60*7*weekdifference sinceDate:lastDayOfWeek];
  67. weekDate = [NSString stringWithFormat:@"第%ld周(%@-%@)",weekofYear,[DataTimeTool stringFromDate:firstDayOfWeek DateFormat:@"yyyy年M月d号"],[DataTimeTool stringFromDate:lastDayOfWeek DateFormat:@"yyyy年M月d号"]];
  68. return weekDate;
  69. }
  70. /**************************当前时间********************************/
  71. +(NSDateComponents *)getCurrentDateComponents {
  72. return [DataTimeTool getDateComponents:[NSDate date]];
  73. }
  74. +(NSInteger)getCurrentWeek {
  75. NSInteger week = [[DataTimeTool stringFromDate:[NSDate date] DateFormat:@"w"] intValue];
  76. return week;
  77. }
  78. +(NSInteger)getCurrentYear{
  79. NSInteger year = [[DataTimeTool stringFromDate:[NSDate date] DateFormat:@"y"] intValue];
  80. return year;
  81. }
  82. +(NSInteger)getCurrentQuarter{
  83. NSInteger quarter = [[DataTimeTool stringFromDate:[NSDate date] DateFormat:@"q"] intValue];
  84. return quarter;
  85. }
  86. +(NSInteger)getCurrentMonth{
  87. NSInteger month = [[DataTimeTool stringFromDate:[NSDate date] DateFormat:@"M"] intValue];
  88. return month;
  89. }
  90. +(NSInteger)getCurrentDay{
  91. NSInteger day = [[DataTimeTool stringFromDate:[NSDate date] DateFormat:@"d"] intValue];
  92. return day;
  93. }
  94. //NSString转NSDate
  95. +(NSDate *)dateFromString:(NSString *)dateString DateFormat:(NSString *)DateFormat{
  96. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  97. [dateFormatter setDateFormat:DateFormat];
  98. NSDate *destDate= [dateFormatter dateFromString:dateString];
  99. return destDate;
  100. }
  101. //NSDate转NSString
  102. +(NSString *)stringFromDate:(NSDate *)date DateFormat:(NSString *)DateFormat{
  103. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  104. [dateFormatter setDateFormat:DateFormat];
  105. NSString *destDateString = [dateFormatter stringFromDate:date];
  106. return destDateString;
  107. }
  108. //时间追加
  109. +(NSString *)dateByAddingTimeInterval:(NSTimeInterval)TimeInterval DataTime:(NSString *)dateStr DateFormat:(NSString *)DateFormat{
  110. NSString *str = nil;
  111. NSDate *date = [self dateFromString:dateStr DateFormat:DateFormat];
  112. NSDate * newDate = [date dateByAddingTimeInterval:TimeInterval];
  113. str = [self stringFromDate:newDate DateFormat:DateFormat];
  114. return str;
  115. }
  116. //日期字符串格式化
  117. +(NSString *)getDataTime:(NSString *)dateStr DateFormat:(NSString *)DateFormat {
  118. return [self getDataTime:dateStr DateFormat:DateFormat oldDateFormat:nil];
  119. }
  120. +(NSString *)getDataTime:(NSString *)dateStr DateFormat:(NSString *)DateFormat oldDateFormat:(NSString *)oldDateFormat{
  121. if (!dateStr || [dateStr isEqualToString:@"—"]) {
  122. return @"—";
  123. }
  124. if ([dateStr isEqualToString:@"0"]) {
  125. return @"0";
  126. }
  127. if ([dateStr rangeOfString:@"+"].location != NSNotFound) {
  128. NSArray *strarray = [dateStr componentsSeparatedByString:@"+"];
  129. dateStr = strarray[0];
  130. }
  131. if ([dateStr rangeOfString:@"."].location != NSNotFound) {
  132. NSArray *strarray = [dateStr componentsSeparatedByString:@"."];
  133. dateStr = strarray[0];
  134. }
  135. if ([dateStr rangeOfString:@"T"].location != NSNotFound) {
  136. dateStr = [dateStr stringByReplacingOccurrencesOfString:@"T" withString:@" "];
  137. }
  138. NSDateFormatter *newDateFormatter = [[NSDateFormatter alloc]init];
  139. [newDateFormatter setDateFormat:DateFormat];
  140. NSDateFormatter *oldDateFormatter = [[NSDateFormatter alloc] init];
  141. if (oldDateFormat) {
  142. [oldDateFormatter setDateFormat:oldDateFormat];
  143. }else {
  144. [oldDateFormatter setDateFormat:[self getFormat:dateStr]];
  145. }
  146. NSDate *date = [oldDateFormatter dateFromString:dateStr];
  147. return [newDateFormatter stringFromDate:date];
  148. }
  149. +(int)getNumberOfCharactersInString:(NSString *)str c:(char)c {
  150. int count = 0;
  151. if ([str rangeOfString:[NSString stringWithFormat:@"%c",c]].location != NSNotFound){
  152. for (int i=0;i<str.length;i++){
  153. if ([str characterAtIndex:i] == c){
  154. count++;
  155. }
  156. }
  157. }
  158. return count;
  159. }
  160. +(NSString *)getFormat:(NSString *)dateString {
  161. NSString *str = [NSString new];
  162. int size = [self getNumberOfCharactersInString:dateString c:'-'];
  163. if (size == 0){
  164. str = [str stringByAppendingString:@"yyyy"];
  165. }else if (size == 1){
  166. str = [str stringByAppendingString:@"yyyy-MM"];
  167. }else if (size == 2){
  168. str = [str stringByAppendingString:@"yyyy-MM-dd"];
  169. }
  170. size = [self getNumberOfCharactersInString:dateString c:':'];
  171. if (size == 0 && [dateString rangeOfString:@" "].location != NSNotFound){
  172. str = [str stringByAppendingString:@" HH"];
  173. }else if (size == 1){
  174. str = [str stringByAppendingString:@" HH:mm"];
  175. }else if (size == 2){
  176. str = [str stringByAppendingString:@" HH:mm:ss"];
  177. }
  178. return str;
  179. }
  180. /**
  181. * json日期转iOS时间
  182. *
  183. * @param string /Date()
  184. *
  185. * @return
  186. */
  187. +(NSString *)interceptTimeStampFromStr:(NSString *)string DateFormat:(NSString *)DateFormat{
  188. if (!string || [string length] == 0 ) // 传入时间戳为空 返回
  189. {
  190. return @"—";
  191. }
  192. NSMutableString * mutableStr = [NSMutableString stringWithString:string];
  193. NSString * timeStampString = [NSString string];
  194. // 遍历取出括号内的时间戳
  195. for (int i = 0; i < string.length; i ++) {
  196. NSRange startRang = [mutableStr rangeOfString:@"("];
  197. NSRange endRang = [mutableStr rangeOfString:@")"];
  198. if (startRang.location != NSNotFound) {
  199. // 左边括号位置
  200. NSInteger leftLocation = startRang.location;
  201. // 右边括号距离左边括号的长度
  202. NSInteger rightLocation = endRang.location - startRang.location;
  203. // 截取括号时间戳内容
  204. timeStampString = [mutableStr substringWithRange:NSMakeRange(leftLocation + 1,rightLocation - 1)];
  205. }
  206. }
  207. // 把时间戳转化成时间
  208. NSTimeInterval interval=[timeStampString doubleValue] / 1000.0;
  209. NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
  210. NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
  211. [objDateformat setDateFormat:DateFormat];//年月日时分秒
  212. NSString * timeStr = [NSString stringWithFormat:@"%@",[objDateformat stringFromDate: date]];
  213. return timeStr;
  214. }

我的业余技术微信公众号:YKJGZH,欢迎大家进入

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读