TimeUtil.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. //
  2. // TimeUtil.m
  3. // wq
  4. //
  5. // Created by berwin on 13-7-20.
  6. // Copyright (c) 2013年 Weqia. All rights reserved.
  7. //
  8. #import "TimeUtil.h"
  9. #import "JXMyTools.h"
  10. @implementation TimeUtil
  11. + (NSString*)getTimeStr:(long) createdAt
  12. {
  13. // Calculate distance time string
  14. //
  15. NSString *timestamp;
  16. time_t now;
  17. time(&now);
  18. int distance = (int)difftime(now, createdAt);
  19. if (distance < 0) distance = 0;
  20. if (distance < 60) {
  21. timestamp = [NSString stringWithFormat:@"%d %s", distance, (distance == 1) ? "second ago" : "seconds ago"];
  22. }
  23. else if (distance < 60 * 60) {
  24. distance = distance / 60;
  25. timestamp = [NSString stringWithFormat:@"%d %s", distance, (distance == 1) ? "minute ago" : "minutes ago"];
  26. }
  27. else if (distance < 60 * 60 * 24) {
  28. distance = distance / 60 / 60;
  29. timestamp = [NSString stringWithFormat:@"%d %s", distance, (distance == 1) ? "hour ago" : "hours ago"];
  30. }
  31. else if (distance < 60 * 60 * 24 * 7) {
  32. distance = distance / 60 / 60 / 24;
  33. timestamp = [NSString stringWithFormat:@"%d %s", distance, (distance == 1) ? "day ago" : "days ago"];
  34. }
  35. else if (distance < 60 * 60 * 24 * 7 * 4) {
  36. distance = distance / 60 / 60 / 24 / 7;
  37. timestamp = [NSString stringWithFormat:@"%d %s", distance, (distance == 1) ? "week ago" : "weeks ago"];
  38. }
  39. else {
  40. static NSDateFormatter *dateFormatter = nil;
  41. if (dateFormatter == nil) {
  42. dateFormatter = [[NSDateFormatter alloc] init];
  43. [dateFormatter setDateStyle:NSDateFormatterShortStyle];
  44. [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
  45. }
  46. NSDate *date = [NSDate dateWithTimeIntervalSince1970:createdAt];
  47. timestamp = [dateFormatter stringFromDate:date];
  48. }
  49. return timestamp;
  50. }
  51. + (NSString*)getTimeStr1:(long long)time
  52. {
  53. NSDate * date=[NSDate dateWithTimeIntervalSince1970:time];
  54. NSCalendar * calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  55. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay|NSCalendarUnitYear|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
  56. NSDateComponents * component=[calendar components:unitFlags fromDate:date];
  57. NSString * string=[NSString stringWithFormat:@"%04d-%02d-%02d %02d:%02d",[component year],[component month],[component day],[component hour],[component minute]];
  58. return string;
  59. }
  60. + (NSString*)getTimeStr1Short:(long long)time
  61. {
  62. NSDate * date=[NSDate dateWithTimeIntervalSince1970:time];
  63. NSCalendar * calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  64. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay|NSCalendarUnitYear|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
  65. NSDateComponents * component=[calendar components:unitFlags fromDate:date];
  66. NSString * string=[NSString stringWithFormat:@"%04d-%02d-%02d",[component year],[component month],[component day]];
  67. return string;
  68. }
  69. + (NSString*)getMDStr:(long long)time
  70. {
  71. NSDate * date=[NSDate dateWithTimeIntervalSince1970:time];
  72. NSCalendar * calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  73. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay|NSCalendarUnitYear|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
  74. NSDateComponents * component=[calendar components:unitFlags fromDate:date];
  75. NSString * string=[NSString stringWithFormat:@"%d%@%d%@",[component month],Localized(@"JX_Month"),[component day],Localized(@"JX_Day1")];
  76. return string;
  77. }
  78. +(NSDateComponents*) getComponent:(long long)time
  79. {
  80. NSDate * date=[NSDate dateWithTimeIntervalSince1970:time];
  81. NSCalendar * calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  82. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay|NSCalendarUnitYear|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
  83. NSDateComponents * component=[calendar components:unitFlags fromDate:date];
  84. return component;
  85. }
  86. +(NSString*) getTimeStrStyle1:(long long)time
  87. {
  88. NSDate * date=[NSDate dateWithTimeIntervalSince1970:time];
  89. NSCalendar * calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  90. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay|NSCalendarUnitYear|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitWeekOfMonth|NSCalendarUnitWeekday;
  91. NSDateComponents * component=[calendar components:unitFlags fromDate:date];
  92. NSInteger year=[component year];
  93. NSInteger month=[component month];
  94. NSInteger day=[component day];
  95. NSInteger hour=[component hour];
  96. NSInteger minute=[component minute];
  97. NSDate * today=[NSDate date];
  98. component=[calendar components:unitFlags fromDate:today];
  99. NSInteger t_year=[component year];
  100. NSInteger t_day = [component day];
  101. NSString*string=nil;
  102. // NSString *timeString = nil;
  103. long long now=[today timeIntervalSince1970];
  104. long distance=now-time;
  105. if(distance<60){
  106. string=Localized(@"TimeUtil_Utill");
  107. }else if(distance<60*30){
  108. if ([g_constant.sysLanguage isEqualToString:@"en"]) {
  109. string=[NSString stringWithFormat:@"%@ %ld %@",Localized(@"JX_Before"),distance/60,Localized(@"JX_Min")];
  110. }else{
  111. string=[NSString stringWithFormat:@"%ld %@%@",distance/60,Localized(@"JX_Min"),Localized(@"JX_Before")];
  112. }
  113. }else if(distance<60*60*24){
  114. if (day == t_day) {
  115. string = [NSString stringWithFormat:@"%d:%02d",hour,minute];
  116. }else {
  117. string = [NSString stringWithFormat:@"%@ %d:%02d",Localized(@"YESTERDAY"),hour,minute];
  118. }
  119. // if ([[JXMyTools getCurrentSysLanguage] isEqualToString:@"en"]) {
  120. //
  121. // timeString = nil;
  122. // timeString = [NSString stringWithFormat:@"%@",Localized(@"JX_Hour")];
  123. // if (distance/60.0/60.0 > 1.0) {//hours
  124. // timeString = [timeString stringByAppendingString:@"s"];
  125. // }
  126. // string=[NSString stringWithFormat:@"%@ %ld %@",Localized(@"JX_Before"),distance/60/60,timeString];
  127. //
  128. // }else{
  129. // string=[NSString stringWithFormat:@"%ld %@%@",distance/60/60,Localized(@"JX_Hour"),Localized(@"JX_Before")];
  130. // }
  131. //string=[NSString stringWithFormat:@"before %ld hour",distance/60/60];
  132. }else if(distance<60*60*24 * 2){
  133. if (t_day - day == 1) {
  134. string = [NSString stringWithFormat:@"%@ %d:%02d",Localized(@"YESTERDAY"),hour,minute];
  135. }else {
  136. string = [NSString stringWithFormat:@"%@ %d:%02d",Localized(@"BEFORE_YESTERDAY"),hour,minute];
  137. }
  138. }else if(distance<60*60*24 * 3){
  139. if (t_day - day == 2) {
  140. string = [NSString stringWithFormat:@"%@ %d:%02d",Localized(@"BEFORE_YESTERDAY"),hour,minute];
  141. }else {
  142. string=[NSString stringWithFormat:@"%02d-%02d %d:%02d",month,day,hour,minute];
  143. }
  144. }
  145. // else if(distance<60*60*24*7){
  146. // if ([[JXMyTools getCurrentSysLanguage] isEqualToString:@"en"]) {
  147. // timeString = nil;
  148. // timeString = [NSString stringWithFormat:@"%@",Localized(@"JX_Day")];
  149. // if (distance/60.0 > 1.0) {
  150. // timeString = [timeString stringByAppendingString:@"s"];
  151. // }
  152. // string=[NSString stringWithFormat:@"%@ %ld %@",Localized(@"JX_Before"),distance/60/60/24,timeString];
  153. // }else{
  154. // string=[NSString stringWithFormat:@"%ld %@%@",distance/60/60/24,Localized(@"JX_Day"),Localized(@"JX_Before")];
  155. // }
  156. // //string=[NSString stringWithFormat:@"before %ld day",distance/60/60/24];
  157. // }
  158. else if(year==t_year){
  159. string=[NSString stringWithFormat:@"%02d-%02d %d:%02d",month,day,hour,minute];
  160. }else{
  161. string=[NSString stringWithFormat:@"%d-%d-%d",year,month,day];
  162. }
  163. return string;
  164. }
  165. +(NSString*) getTimeStrStyle2:(long long)time
  166. {
  167. NSDate * date=[NSDate dateWithTimeIntervalSince1970:time];
  168. NSCalendar * calendar=[[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
  169. NSInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay|NSCalendarUnitYear|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitWeekOfMonth|NSCalendarUnitWeekday;
  170. NSDateComponents * component=[calendar components:unitFlags fromDate:date];
  171. NSInteger year=[component year];
  172. NSInteger month=[component month];
  173. NSInteger day=[component day];
  174. NSInteger hour=[component hour];
  175. NSInteger minute=[component minute];
  176. NSInteger week=[component weekOfMonth];
  177. NSInteger weekday=[component weekday];
  178. NSDate * today=[NSDate date];
  179. component=[calendar components:unitFlags fromDate:today];
  180. NSInteger t_year=[component year];
  181. NSInteger t_month=[component month];
  182. NSInteger t_day=[component day];
  183. NSInteger t_week=[component weekOfMonth];
  184. NSString*string=nil;
  185. if(year==t_year&&month==t_month&&day==t_day)
  186. {
  187. if(hour<6&&hour>=0)
  188. string=[NSString stringWithFormat:@"%d:%02da.m",hour,minute];
  189. else if(hour>=6&&hour<12)
  190. string=[NSString stringWithFormat:@"%d:%02da.m",hour,minute];
  191. else if(hour>=12&&hour<18)
  192. string=[NSString stringWithFormat:@"%d:%02dp.m",hour,minute];
  193. else
  194. string=[NSString stringWithFormat:@"%d:%02dp.m",hour,minute];
  195. }
  196. else if(year==t_year&&week==t_week)
  197. {
  198. NSString * daystr=nil;
  199. switch (weekday) {
  200. case 1:
  201. daystr=Localized(@"TimeUtil_Sun");
  202. break;
  203. case 2:
  204. daystr=Localized(@"TimeUtil_Mon");
  205. break;
  206. case 3:
  207. daystr=Localized(@"TimeUtil_Tue");
  208. break;
  209. case 4:
  210. daystr=Localized(@"TimeUtil_Wed");
  211. break;
  212. case 5:
  213. daystr=Localized(@"TimeUtil_Thu");
  214. break;
  215. case 6:
  216. daystr=Localized(@"TimeUtil_Fri");
  217. break;
  218. case 7:
  219. daystr=Localized(@"TimeUtil_Sat");
  220. break;
  221. default:
  222. break;
  223. }
  224. string=[NSString stringWithFormat:@"%@ %d:%02d",daystr,hour,minute];
  225. }
  226. else if(year==t_year)
  227. string=[NSString stringWithFormat:@"%d:%d",month,day];
  228. else
  229. string=[NSString stringWithFormat:@"%d:%d:%d",year,month,day];
  230. return string;
  231. }
  232. +(int)dayCountForMonth:(int)month andYear:(int)year
  233. {
  234. if (month==1||month==3||month==5||month==7||month==8||month==10||month==12) {
  235. return 31;
  236. }else if(month==4||month==6||month==9||month==11){
  237. return 30;
  238. }else if([self isLeapYear:year]){
  239. return 29;
  240. }else{
  241. return 28;
  242. }
  243. }
  244. +(BOOL)isLeapYear:(int)year
  245. {
  246. if (year%400==0) {
  247. return YES;
  248. }else{
  249. if (year%4==0&&year%100!=0) {
  250. return YES;
  251. }else{
  252. return NO;
  253. }
  254. }
  255. }
  256. +(NSString*)getTimeShort:(long long)t{
  257. if(t<0)
  258. t = 0;
  259. int m = (int)(t/60);
  260. int n = t%60;
  261. return [NSString stringWithFormat:@"%.2d:%.2d",m,n];
  262. }
  263. +(NSString*)getTimeShort1:(long long)t{
  264. if(t<0)
  265. t = 0;
  266. int p = (int)(t / 3600);
  267. t = t % 3600;
  268. int m = (int)(t/60);
  269. int n = t%60;
  270. if (p <= 0) {
  271. return [NSString stringWithFormat:@"%.2d:%.2d",m,n];
  272. }
  273. return [NSString stringWithFormat:@"%.2d:%.2d:%.2d",p,m,n];
  274. }
  275. +(NSDate*)dateFromString:(NSString*)s format:(NSString*)str{
  276. NSDateFormatter* f=[[NSDateFormatter alloc]init];
  277. if(str==nil)
  278. str = @"yyyy-MM-dd";
  279. [f setDateFormat:str];
  280. NSDate* d = [f dateFromString:s];
  281. return d;
  282. }
  283. +(NSString*)formatDateFromStr:(NSString*)s format:(NSString*)str{
  284. NSDateFormatter* f=[[NSDateFormatter alloc]init];
  285. if(!str)
  286. str = @"yyyy-MM-dd HH:mm:ss";
  287. [f setDateFormat:str];
  288. NSDate* d = [f dateFromString:s];
  289. f.dateFormat = str;
  290. NSString* s1 = [f stringFromDate:d];
  291. // [f release];
  292. return s1;
  293. }
  294. +(NSString*)formatDate:(NSDate*)d format:(NSString*)str{
  295. NSDateFormatter* f=[[NSDateFormatter alloc]init];
  296. f.dateFormat = str;
  297. NSString* s = [f stringFromDate:d];
  298. // [f release];
  299. return s;
  300. }
  301. +(NSString*)getDateStr:(long long)time{
  302. NSDateFormatter* f=[[NSDateFormatter alloc]init];
  303. f.dateFormat = @"yyyy-MM-dd";
  304. NSString* s = [f stringFromDate:[NSDate dateWithTimeIntervalSince1970:time]];
  305. // [f release];
  306. return s;
  307. }
  308. @end