#import <Foundation/Foundation.h>@interface NSString (Adapter)- (BOOL) isEmpty;
//截取两个字符串中间的内容
- (NSArray *)componentsSeparatedFromString:(NSString *)fromString toString:(NSString *)toString;
//手机号验证
- (BOOL)valiMobile;
//身份证号验证
-(BOOL)checkIsPeopleNumber;
//格林威志转 yyyy年MM月dd日
- (NSString *)timeToyyyyMMdd;
//格林威志转 yyyy-MM-dd
- (NSString *)timeToyyyy_MM_dd;
//格林威志转 yyyy-MM-dd HH:mm:ss
- (NSString *)timeToyyyyMMddHHmmssString;
//yyyy-MM-dd HH:mm:ss转格林威志
- (NSString *)timeToGreenDLXTime;
//格林威志转时间戳
- (NSTimeInterval)timeToGreenDLXToTimeString;
//时间戳转格林威志时间
- (NSString *)timeStringToGreenDLX;
//yyyy-MM-dd增加N年N月N天
- (NSString *)timeApendWithYear:(NSInteger )year Month:(NSInteger)month Day:(NSInteger)day;
//根据字体获取label的size
- (CGSize)getStringSizeWithFontSize:(CGFloat)font;
//根据字体和宽度获取size
- (CGSize)getStringSizeWithFontSize:(CGFloat)font Width:(CGFloat)width;
//yyyy-MM-dd HH:mm:ss转今天、昨天、几天前、日期
- (NSString *)createCommentTimeString;
@end
#import "NSString+Adapter.h"
static NSCalendar* g_UMCalendar = nil;
static NSCalendar* g_UMCurrentCalendar = nil;
NSString* const g_UMNullDateFormat = @"";
NSString* const g_UMFullDateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString* const g_UMTodayDateFormat = @"HH:mm";
NSString* const g_UMCurYearDateFormat = @"MM-dd";
NSString* const g_UMBeforeCurYearDateFormat = @"yy-MM-dd";
NSString* const g_UMAfterCurYearDateFormat = @"yy-MM-dd";
NSString* const g_UMYesteday = @"昨天";@implementation NSString (Adapter)//判断内容是否全部为空格  yes 全部为空格  no 不是
- (BOOL) isEmpty{if (!self) {return YES;} else {NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];NSString *trimedString = [self stringByTrimmingCharactersInSet:set];if ([trimedString length] == 0) {return YES;} else {return NO;}}
}
//截取两个字符串中间的内容
- (NSArray *)componentsSeparatedFromString:(NSString *)fromString toString:(NSString *)toString
{if (!fromString || !toString || fromString.length == 0 || toString.length == 0) {return nil;}NSMutableArray *subStringsArray = [[NSMutableArray alloc] init];NSString *tempString = self;NSRange range = [tempString rangeOfString:fromString];while (range.location != NSNotFound) {tempString = [tempString substringFromIndex:(range.location + range.length)];range = [tempString rangeOfString:toString];if (range.location != NSNotFound) {[subStringsArray addObject:[tempString substringToIndex:range.location]];range = [tempString rangeOfString:fromString];}else{break;}}return subStringsArray;
}/**手机号码 13[0-9],14[5|7|9],15[0-3],15[5-9],17[0|1|3|5|6|8],18[0-9]移动:134[0-8],13[5-9],147,15[0-2],15[7-9],178,18[2-4],18[7-8]联通:13[0-2],145,15[5-6],17[5-6],18[5-6]电信:133,1349,149,153,173,177,180,181,189虚拟运营商: 170[0-2]电信  170[3|5|6]移动 170[4|7|8|9],171 联通上网卡又称数据卡,14号段为上网卡专属号段,中国联通上网卡号段为145,中国移动上网卡号段为147,中国电信上网卡号段为149*/
- (BOOL)valiMobile
{NSString * MOBIL = @"^1(3[0-9]|4[5679]|5[0-35-9]|6[6]|7[01356]|8[0-9]|9[89])\\d{8}$";NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBIL];if ([regextestmobile evaluateWithObject:self]) {return YES;}return NO;
}-(BOOL)checkIsPeopleNumber
{NSString *num = self;//长度不为18的都排除掉if (num.length!=18) {return NO;}//校验格式NSString *regex2 = @"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$";NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];BOOL flag = [identityCardPredicate evaluateWithObject:num];if (!flag) {return flag;    //格式错误}else {//格式正确在判断是否合法//将前17位加权因子保存在数组里NSArray * idCardWiArray = @[@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2"];//这是除以11后,可能产生的11位余数、验证码,也保存成数组NSArray * idCardYArray = @[@"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];//用来保存前17位各自乖以加权因子后的总和NSInteger idCardWiSum = 0;for(int i = 0;i < 17;i++){NSInteger subStrIndex = [[num substringWithRange:NSMakeRange(i, 1)] integerValue];NSInteger idCardWiIndex = [[idCardWiArray objectAtIndex:i] integerValue];idCardWiSum+= subStrIndex * idCardWiIndex;}//计算出校验码所在数组的位置NSInteger idCardMod=idCardWiSum%11;//得到最后一位身份证号码NSString * idCardLast= [num substringWithRange:NSMakeRange(17, 1)];//如果等于2,则说明校验码是10,身份证号码最后一位应该是Xif(idCardMod==2){if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]){return YES;}else{return NO;}}else{//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码if([idCardLast isEqualToString: [idCardYArray objectAtIndex:idCardMod]]){return YES;}else{return NO;}}}
}- (NSString *)timeToyyyy_MM_dd{// 时间字符串NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ"; // 3.利用时间格式化对象让字符串转换成时间 (自动转换0时区/东加西减)NSDate *date = [formatter dateFromString:self];NSDateFormatter* formatter1 = [[NSDateFormatter alloc] init];formatter1.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"];[formatter1 setDateStyle:NSDateFormatterMediumStyle];[formatter1 setTimeStyle:NSDateFormatterShortStyle];[formatter1 setDateFormat:@"yyyy-MM-dd"];NSString* dateString = [formatter1 stringFromDate:date];return dateString;
}- (NSString *)timeToyyyyMMdd{// 时间字符串NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ"; // 3.利用时间格式化对象让字符串转换成时间 (自动转换0时区/东加西减)NSDate *date = [formatter dateFromString:self];NSDateFormatter* formatter1 = [[NSDateFormatter alloc] init];formatter1.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"];[formatter1 setDateStyle:NSDateFormatterMediumStyle];[formatter1 setTimeStyle:NSDateFormatterShortStyle];[formatter1 setDateFormat:@"yyyy年MM月dd日"];NSString* dateString = [formatter1 stringFromDate:date];return dateString;
}- (NSString *)timeToyyyyMMddHHmmssString{// 时间字符串NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ"; // 3.利用时间格式化对象让字符串转换成时间 (自动转换0时区/东加西减)NSDate *date = [formatter dateFromString:self];NSDateFormatter* formatter1 = [[NSDateFormatter alloc] init];formatter1.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"];[formatter1 setDateStyle:NSDateFormatterMediumStyle];[formatter1 setTimeStyle:NSDateFormatterShortStyle];[formatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];NSString* dateString = [formatter1 stringFromDate:date];return dateString;
}- (NSString *)timeToGreenDLXTime{// 时间字符串NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 3.利用时间格式化对象让字符串转换成时间 (自动转换0时区/东加西减)NSDate *date = [formatter dateFromString:self];NSDateFormatter* formatter1 = [[NSDateFormatter alloc] init];formatter1.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"];[formatter1 setDateStyle:NSDateFormatterMediumStyle];[formatter1 setTimeStyle:NSDateFormatterShortStyle];[formatter1 setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];NSString* dateString = [formatter1 stringFromDate:date];return dateString;
}- (NSTimeInterval)timeToGreenDLXToTimeString{NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateStyle:NSDateFormatterMediumStyle];[formatter setTimeStyle:NSDateFormatterShortStyle];[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];NSDate *Date = [formatter dateFromString:self];NSTimeInterval timeStr = [Date timeIntervalSince1970];return timeStr;
}- (NSString *)timeStringToGreenDLX{NSDate *date = [NSDate dateWithTimeIntervalSince1970:[self longLongValue]/1000];NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateStyle:NSDateFormatterMediumStyle];[formatter setTimeStyle:NSDateFormatterShortStyle];[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];NSString *dateString = [formatter stringFromDate:date];return dateString;
}- (NSString *)timeApendWithYear:(NSInteger )year Month:(NSInteger)month Day:(NSInteger)day{NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];[dateFormatter  setDateFormat:@"yyyy-MM-dd"];NSDate* date = [dateFormatter dateFromString:self];NSDateComponents *comps = [[NSDateComponents alloc] init];[comps setYear:year];[comps setMonth:month];[comps setDay:day];NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];NSDate *myDate = [calendar dateByAddingComponents:comps toDate:date options:0];NSString *time = [dateFormatter stringFromDate:myDate];return time;
}- (CGSize)getStringSizeWithFontSize:(CGFloat)font{CGSize size = [self sizeWithFont:[UIFont systemFontOfSize:font]constrainedToSize:CGSizeMake(FLT_MAX,FLT_MAX)lineBreakMode:UILineBreakModeWordWrap];return size;
}- (CGSize)getStringSizeWithFontSize:(CGFloat)font Width:(CGFloat)width{CGSize size = [self sizeWithFont:[UIFont systemFontOfSize:font]constrainedToSize:CGSizeMake(width,FLT_MAX)lineBreakMode:UILineBreakModeWordWrap];return size;
}+ (BOOL) isEmpty {NSString *str = [self string];if(!str) {return true;}else {NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];NSString *trimedString = [str stringByTrimmingCharactersInSet:set];if([trimedString length] == 0) {return true;}else {return false;}}
}- (NSString *)createCommentTimeString
{if (![self isKindOfClass:[NSString class]] || self.length == 0) {return g_UMNullDateFormat;}NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];if (!g_UMCalendar) {g_UMCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];}[dateFormatter setCalendar:g_UMCalendar];[dateFormatter setDateFormat:g_UMFullDateFormat];NSDate *createDate= [dateFormatter dateFromString:self];if (createDate == nil) {return g_UMNullDateFormat;}if (!g_UMCurrentCalendar) {g_UMCurrentCalendar = [NSCalendar currentCalendar];NSTimeZone *zone = [NSTimeZone systemTimeZone];if (zone) {g_UMCurrentCalendar.timeZone = zone;}}//当前的时间NSDate *today = [NSDate date];NSDateComponents *todayComponents = [g_UMCurrentCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:today];NSDateComponents *createComponents = [g_UMCurrentCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:createDate];if (!todayComponents || !createComponents) {return g_UMNullDateFormat;}//计算创建时间的段一个月的最大天数NSRange createDateMaxDaysInCurMonth = [g_UMCurrentCalendar rangeOfUnit:NSDayCalendarUnitinUnit:NSMonthCalendarUnitforDate:createDate];if (createDateMaxDaysInCurMonth.length == NSNotFound) {//如果计算不出来当前的最大值,说明字符串给出的时间格式或者日期有问题return g_UMNullDateFormat;}NSString* reslutString = g_UMNullDateFormat;NSInteger yearsOffsetSinceNow =  createComponents.year - todayComponents.year;if (yearsOffsetSinceNow > 0) {//创建时间大于当前的时间,此处就直接显示日期(yy-MM-dd)[dateFormatter setDateFormat:g_UMAfterCurYearDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}else if (yearsOffsetSinceNow == 0){//在当年NSInteger monthOffsetSinceNow = createComponents.month - todayComponents.month;if (monthOffsetSinceNow > 0) {//创建时间大于当前的时间,此处就直接显示日期(yy-MM-dd)[dateFormatter setDateFormat:g_UMAfterCurYearDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}else if (monthOffsetSinceNow == 0){//在当月NSInteger dayOffsetSinceNow = createComponents.day - todayComponents.day;if (dayOffsetSinceNow > 0) {//创建时间大于当前的时间,此处就直接显示日期(yy-MM-dd)[dateFormatter setDateFormat:g_UMAfterCurYearDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}else if (dayOffsetSinceNow == 0){//今天(HH:mm)[dateFormatter setDateFormat:g_UMTodayDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}else if (dayOffsetSinceNow == -1){//昨天(昨天 HH:mm)[dateFormatter setDateFormat:g_UMTodayDateFormat];NSString* tempString = [dateFormatter stringFromDate:createDate];if (!tempString) {return reslutString;}//2.5版的时间函数显示(昨天 HH:mm)reslutString = [NSString stringWithFormat:@"昨天%@",tempString];//2.6版本的时间函数显示 (昨天)//                reslutString = g_UMYesteday;}else{//今年(MM-dd)[dateFormatter setDateFormat:g_UMCurYearDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}}else{if ((monthOffsetSinceNow == -1) &&(createDateMaxDaysInCurMonth.length == createComponents.day) && todayComponents.day == 1) {//昨天(昨天 HH:mm)[dateFormatter setDateFormat:g_UMTodayDateFormat];NSString* tempString = [dateFormatter stringFromDate:createDate];if (!tempString) {return reslutString;}//2.5版的时间函数显示(昨天 HH:mm)reslutString = [NSString stringWithFormat:@"昨天%@",tempString];//2.6版本的时间函数显示 (昨天)//                reslutString = g_UMYesteday;}else{//今年(MM-dd)[dateFormatter setDateFormat:g_UMCurYearDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}}}else{//在去年或者以前的某一天if ((yearsOffsetSinceNow == -1) &&(createComponents.day == createDateMaxDaysInCurMonth.length) &&(createComponents.month == 12)&&(todayComponents.month == 1) && (todayComponents.day == 1)){//昨天(昨天 HH:mm)[dateFormatter setDateFormat:g_UMTodayDateFormat];NSString* tempString = [dateFormatter stringFromDate:createDate];if (!tempString) {return reslutString;}//时间函数显示(昨天 HH:mm)reslutString = [NSString stringWithFormat:@"昨天%@",tempString];}else{//往年(yy-MM-dd)[dateFormatter setDateFormat:g_UMBeforeCurYearDateFormat];reslutString = [dateFormatter stringFromDate:createDate];}}return reslutString;
}@end

iOS 格林威治 时间转换 NSString扩展相关推荐

  1. 日期格式:ddMMyy-hhmmss,格林威治时间转换成北京时间

    有些项目需要第三方的接口来取数据,这样就有个问题,那就是有些字段比较特殊,采用的都是国际标准时间,方便别的语言调用,这样时间差就相差不一样了,需要进行转换. 例如:GPS的数据时间格式:ddMMyy- ...

  2. 本地时间和格林威治时间转换

    /*** * 转成格林威治时间 * * @param LocalDate 时间格式必须是yyyy-MM-dd HH:mm:ss * @return*/ public static String Loc ...

  3. 格林威治时间转换成北京时间

    解析rss订阅内容时候,发现pubDate是格林威治时间格式,在手册上找到这个函数,收藏 gmstrtotime($sgm) {$months = array('Jan'=>1,'Feb'=&g ...

  4. 格林威治时间转换成北京时间,Mon May 10 2021 15:34:42 GMT+0800 (中国标准时间) TO 2021/5/10

    public class DateUtil {public final static String FORMAT_STRING = "yyyy-MM-dd HH:mm:ss";pu ...

  5. 格林威治时间转换成字符串

    字符串转相应格式的日期再转成特定格式字符串 public Text evaluate(Text date1 ){//源数据格式 "31/Aug/2015:00:04:37 +0800&quo ...

  6. 格林威治 时间 转换北京使劲

    filterTime(time) {var date = new Date(time);var y = date.getFullYear();var m = date.getMonth() + 1;m ...

  7. C语言之本地时间与格林威治时间互相转换(2种相互转换方法)

    格林威治时间转换显示 #include <stdio.h> #include <string.h> #include <time.h>typedef struct ...

  8. iOS时间转换相关整理(附送试用期逻辑处理)

    对于时间转换我们并不陌生,只是不同的后台风格不同,我们请求回来的时间格式也不同! 现整理时间相关点: //从1970年开始到现在经过了多少秒-(NSString *)getTimeSp{NSStrin ...

  9. java输出格林威治时间_Java之格林威治时间格式转换成北京时间格式

    Java之格林威治时间格式转换成北京时间格式 /** * Copyright 2020. yaodouwang.com Studio All Right Reserved * * Create on ...

最新文章

  1. Git log、diff、config 进阶
  2. DataWorks 如何设置调度依赖
  3. Linux 上安装 appium
  4. vm15 安装 mac虚拟机的过程 转载的
  5. angular路由传递参数_Angular路由——在路由时候传递数据
  6. 如何设置PP视频允许PPAP驻留
  7. 自动驾驶使用贝塞尔曲线进行静态障碍物避障测试
  8. 混合编程:如何用pybind11调用C++
  9. 广度优先搜索_快速入门广度优先搜索
  10. LInux下的交换分区以及相关查看命令
  11. c++设计一个无法被继承的类
  12. 2018-2019 C++期末复习资料
  13. 什么是3d建模,3D建模师可以从事哪些职业?
  14. 【MAC】有道笔记登陆不了,刷新不出登陆
  15. 实时摄像头直播方案 RTSP
  16. 产品读书《金字塔原理》
  17. unity中实现ue眼球的渲染
  18. 用python处理excel之替换功能
  19. 程序员之间最丧心病狂的鄙视链——编程语言篇
  20. 数据结构 - 二叉树的遍历

热门文章

  1. 关于腾讯社区开放平台
  2. #创新实训#VR漫游项目汇报1
  3. 证券从业考试考试技巧
  4. 华为防火墙配置(远程管理)
  5. 基于微服务的新零售业务中台OMS
  6. R语言描述性统计函数总结
  7. 如何使用curl命令发送json格式请求体的post请求
  8. html图片点击左右滑动效果,jQuery点击左右滚动产品图片展示代码
  9. 重温WIN32 API ------ 最简单的Windows窗口封装类
  10. Form 表单 邮箱、手机号、中文名、身份证号码格式验证