NSDate(拓展)

#pragma mark - 1.NSStringNSDate(年,月,日分割)

/**

 *  1.NSStringNSDate(年,月,日分割)

 *

 *  @param uiDate 需要转换的日期

 *

 *  @return

 */

+(NSDate*) convertDateFromString:(NSString*)uiDate

{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;

    [formatter setDateFormat:@"yyyyMMdd"];

    NSDate *date=[formatter dateFromString:uiDate];

    return date;

}

#pragma mark - 2.NSStringNSDate(年,月,日分割)

/**

 *  2.NSStringNSDate(年,月,日分割)

 *

 *  @param dateString 需要转换的日期

 *

 *  @return

 */

+(NSDate *)dateFromString:(NSString *)dateString

{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    

    [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];

    

    

    

    

    

    NSDate *destDate= [dateFormatter dateFromString:dateString];

    

    

    

    

    

    

    

    return destDate;

    


}

- (BOOL)isToday

{

    return [[NSDate dateStartOfDay:self] isEqualToDate:[NSDate dateStartOfDay:[NSDate date]]];

}


+ (NSDate *)dateStartOfDay:(NSDate *)date {

    NSCalendar *gregorian = [[NSCalendar alloc]

                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    

    NSDateComponents *components =

    [gregorian               components:(NSCalendarUnitYear | NSCalendarUnitMonth |

                                         NSCalendarUnitDay) fromDate:date];

    return [gregorian dateFromComponents:components];

}


+ (BOOL)isSameDayWithTime:(NSTimeInterval )firstTime andTime:(NSTimeInterval )secondTime{

    NSDate *firstDate = [NSDate dateWithTimeIntervalSince1970:firstTime];

    NSDate *secondDate = [NSDate dateWithTimeIntervalSince1970:secondTime];

    return [firstDate isSameDayWithDate:secondDate];

}


+ (BOOL)isSameDayWithDate:(NSDate *)firstDate andDate:(NSDate *)secondDate {

    NSCalendar* calendar = [NSCalendar currentCalendar];

    

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonthNSCalendarUnitDay;

    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:firstDate];

    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:secondDate];

    

    return [comp1 day] == [comp2 day] && 

    [comp1 month] == [comp2 month] && 

    [comp1 year] == [comp2 year];

}


- (BOOL)isSameDayWithDate:(NSDate*)date {

    //取得当前用户的逻辑日历

    NSCalendar* calendar = [NSCalendar currentCalendar];

    

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonthNSCalendarUnitDay;

    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:self];

    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date];

    

    return [comp1 day] == [comp2 day] && 

    [comp1 month] == [comp2 month] && 

    [comp1 year] == [comp2 year];

}

#pragma mark -//返回当前天的年月日

/**

 *  //返回当前天的年月日

 *

 *  @param date

 *

 *  @return

 */

+ (NSDate*)acquireTimeFromDate:(NSDate*)date {

    NSCalendar* calendar = [NSCalendar currentCalendar];

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonthNSCalendarUnitDay;

    NSDateComponents* comps = [calendar components:unitFlags fromDate:date];

    NSDate* result = [calendar dateFromComponents:comps];

    return result;

}

#pragma mark - //返回一周的第几天(周末为第一天)

/**

 *  返回一周的第几天(周末为第一天)

 *

 *  @param date

 *

 *  @return

 */

+ (NSInteger)acquireWeekDayFromDate:(NSDate*)date {

    //首先创建NSCalendar的实例

    NSCalendar* calendar = [NSCalendar currentCalendar];

    //需要通过函数参数components指定希望获取的元素

    //(周数)

    unsigned unitFlags = NSCalendarUnitWeekday;

    NSDateComponents* comps = [calendar components:unitFlags fromDate:date];

    

    return [comps weekday];

}


#pragma mark - //获取当前的日

- (NSInteger)day {

    //  先定义一个遵循某个历法的日历对象

    NSCalendar *gregorian = [[NSCalendar alloc]

                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *components = [gregorian components:NSCalendarUnitDay fromDate:self];

    return [components day];

}

#pragma mark - //获取当前的月

- (NSInteger)month {

    //  先定义一个遵循某个历法的日历对象

    NSCalendar *gregorian = [[NSCalendar alloc]

                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *components = [gregorian components:NSCalendarUnitMonth fromDate:self];

    return [components month];

}

#pragma mark - //获取当前的年

- (NSInteger)year {

    //  先定义一个遵循某个历法的日历对象

    NSCalendar *gregorian = [[NSCalendar alloc]

                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    //  通过已定义的日历对象,获取某个时间点的NSDateComponents表示,并设置需要表示哪些信息(NSYearCalendarUnit, NSMonthCalendarUnit, NSDayCalendarUnit等)

    NSDateComponents *components = [gregorian components:NSCalendarUnitYear fromDate:self];

    return [components year];

}


+(NSString *)stringWithTimestamp:(NSTimeInterval)tt format:(NSString *)format

{

NSDate *date = [NSDate dateWithTimeIntervalSince1970:tt];

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:format];

return [formatter stringFromDate:date];

}

//获取年月日如:19871127.

- (NSString *)getFormatYearMonthDay

{

    NSString *string = [NSString stringWithFormat:@"%d%02d%02d",[self getYear],[self getMonth],[self getDay]];

    return string;

}


//该日期是该年的第几周

- (int )getWeekOfYear

{

    int i;

    int year = [self getYear];

    NSDate *date = [self endOfWeek];

    for (i = 1;[[date dateAfterDay:-7 * i] getYear] == year;i++)

    {

    }

    return i;

}

//返回day天后的日期(day为负数,则为|day|天前的日期)

- (NSDate *)dateAfterDay:(int)day

{

    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Get the weekday component of the current date

    // NSDateComponents *weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:self];

    NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];

    // to get the end of week for a particular date, add (7 - weekday) days

    [componentsToAdd setDay:day];

    NSDate *dateAfterDay = [calendar dateByAddingComponents:componentsToAdd toDate:self options:0];

    

    

    return dateAfterDay;

}

//month个月后的日期

- (NSDate *)dateafterMonth:(int)month

{

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];

    [componentsToAdd setMonth:month];

    NSDate *dateAfterMonth = [calendar dateByAddingComponents:componentsToAdd toDate:self options:0];

    

    

    return dateAfterMonth;

}

//获取日

- (NSUInteger)getDay{

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *dayComponents = [calendar components:(NSDayCalendarUnit) fromDate:self];

    return [dayComponents day];

}

//获取月

- (NSUInteger)getMonth

{

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *dayComponents = [calendar components:(NSMonthCalendarUnit) fromDate:self];

    return [dayComponents month];

}

//获取年

- (NSUInteger)getYear

{

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *dayComponents = [calendar components:(NSYearCalendarUnit) fromDate:self];

    return [dayComponents year];

}

//获取小时

- (int )getHour {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSUInteger unitFlags =NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit|NSMinuteCalendarUnit;

    NSDateComponents *components = [calendar components:unitFlags fromDate:self];

    NSInteger hour = [components hour];

    return (int)hour;

}

//获取分钟

- (int)getMinute {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSUInteger unitFlags =NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit|NSMinuteCalendarUnit;

    NSDateComponents *components = [calendar components:unitFlags fromDate:self];

    NSInteger minute = [components minute];

    return (int)minute;

}

- (int )getHour:(NSDate *)date {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSUInteger unitFlags =NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit|NSMinuteCalendarUnit;

    NSDateComponents *components = [calendar components:unitFlags fromDate:date];

    NSInteger hour = [components hour];

    return (int)hour;

}

- (int)getMinute:(NSDate *)date {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSUInteger unitFlags =NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit |NSHourCalendarUnit|NSMinuteCalendarUnit;

    NSDateComponents *components = [calendar components:unitFlags fromDate:date];

    NSInteger minute = [components minute];

    return (int)minute;

}

//在当前日期前几天

- (NSUInteger)daysAgo {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *components = [calendar components:(NSDayCalendarUnit)

                                               fromDate:self

                                                 toDate:[NSDate date]

                                                options:0];

    return [components day];

}

//午夜时间距今几天

- (NSUInteger)daysAgoAgainstMidnight {

    // get a midnight version of ourself:

    NSDateFormatter *mdf = [[NSDateFormatter alloc] init];

    [mdf setDateFormat:@"yyyy-MM-dd"];

    NSDate *midnight = [mdf dateFromString:[mdf stringFromDate:self]];

    

    

    return (int)[midnight timeIntervalSinceNow] / (60*60*24) *-1;

}


- (NSString *)stringDaysAgo {

    return [self stringDaysAgoAgainstMidnight:YES];

}


- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag {

    NSUInteger daysAgo = (flag) ? [self daysAgoAgainstMidnight] : [self daysAgo];

    NSString *text = nil;

    switch (daysAgo) {

        case 0:

            text = @"Today";

            break;

        case 1:

            text = @"Yesterday";

            break;

        default:

            text = [NSString stringWithFormat:@"%d days ago", daysAgo];

    }

    return text;

}


//返回一周的第几天(周末为第一天)

- (NSUInteger)weekday {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *weekdayComponents = [calendar components:(NSWeekdayCalendarUnit) fromDate:self];

    return [weekdayComponents weekday];

}

//转为NSString类型的

+ (NSDate *)dateFromString:(NSString *)string {

    return [NSDate dateFromString:string withFormat:[NSDate dbFormatString]];

}


+ (NSDate *)dateFromString:(NSString *)string withFormat:(NSString *)format {

    NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];

    [inputFormatter setDateFormat:format];

    NSDate *date = [inputFormatter dateFromString:string];

    

    return date;

}


+ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)format {

    return [date stringWithFormat:format];

}


+ (NSString *)stringFromDate:(NSDate *)date {

    return [date string];

}


+ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed {

    /*

     * if the date is in today, display 12-hour time with meridian,

     * if it is within the last 7 days, display weekday name (Friday)

     * if within the calendar year, display as Jan 23

     * else display as Nov 11, 2008

     */

    

    NSDate *today = [NSDate date];

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *offsetComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit)

                                                     fromDate:today];

    

    NSDate *midnight = [calendar dateFromComponents:offsetComponents];

    

    NSDateFormatter *displayFormatter = [[NSDateFormatter alloc] init];

    NSString *displayString = nil;

    

    // comparing against midnight

    if ([date compare:midnight] == NSOrderedDescending) {

        if (prefixed) {

            [displayFormatter setDateFormat:@"'at' h:mm a"]; // at 11:30 am

        } else {

            [displayFormatter setDateFormat:@"h:mm a"]; // 11:30 am

        }

    } else {

        // check if date is within last 7 days

        NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];

        [componentsToSubtract setDay:-7];

        NSDate *lastweek = [calendar dateByAddingComponents:componentsToSubtract toDate:today options:0];

        

        if ([date compare:lastweek] == NSOrderedDescending) {

            [displayFormatter setDateFormat:@"EEEE"]; // Tuesday

        } else {

            // check if same calendar year

            NSInteger thisYear = [offsetComponents year];

            

            NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit)

                                                           fromDate:date];

            NSInteger thatYear = [dateComponents year];

            if (thatYear >= thisYear) {

                [displayFormatter setDateFormat:@"MMM d"];

            } else {

                [displayFormatter setDateFormat:@"MMM d, yyyy"];

            }

        }

        if (prefixed) {

            NSString *dateFormat = [displayFormatter dateFormat];

            NSString *prefix = @"'on' ";

            [displayFormatter setDateFormat:[prefix stringByAppendingString:dateFormat]];

        }

    }

    

    // use display formatter to return formatted date string

    displayString = [displayFormatter stringFromDate:date];

    

    return displayString;

}


+ (NSString *)stringForDisplayFromDate:(NSDate *)date {

    return [self stringForDisplayFromDate:date prefixed:NO];

}


- (NSString *)stringWithFormat:(NSString *)format {

    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];

    [outputFormatter setDateFormat:format];

    NSString *timestamp_str = [outputFormatter stringFromDate:self];

    

    return timestamp_str;

}


- (NSString *)string {

    return [self stringWithFormat:[NSDate dbFormatString]];

}


- (NSString *)stringWithDateStyle:(NSDateFormatterStyle)dateStyle timeStyle:(NSDateFormatterStyle)timeStyle {

    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];

    [outputFormatter setDateStyle:dateStyle];

    [outputFormatter setTimeStyle:timeStyle];

    NSString *outputString = [outputFormatter stringFromDate:self];

    

    return outputString;

}

//返回周日的的开始时间

- (NSDate *)beginningOfWeek {

    // largely borrowed from "Date and Time Programming Guide for Cocoa"

    // we'll use the default calendar and hope for the best

    

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *beginningOfWeek = nil;

    BOOL ok = [calendar rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek

                           interval:NULL forDate:self];

    if (ok) {

        return beginningOfWeek;

    }

    

    // couldn't calc via range, so try to grab Sunday, assuming gregorian style

    // Get the weekday component of the current date

    NSDateComponents *weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:self];

    

    /*

     Create a date components to represent the number of days to subtract from the current date.

     The weekday value for Sunday in the Gregorian calendar is 1, so subtract 1 from the number of days to subtract from the date in question.  (If today's Sunday, subtract 0 days.)

     */

    NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];

    [componentsToSubtract setDay: 0 - ([weekdayComponents weekday] - 1)];

    beginningOfWeek = nil;

    beginningOfWeek = [calendar dateByAddingComponents:componentsToSubtract toDate:self options:0];

    

    //normalize to midnight, extract the year, month, and day components and create a new date from those components.

    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit)

                                               fromDate:beginningOfWeek];

    return [calendar dateFromComponents:components];

}

//返回当前天的年月日.

- (NSDate *)beginningOfDay {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Get the weekday component of the current date

    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |NSDayCalendarUnit)

                                               fromDate:self];

    return [calendar dateFromComponents:components];

}

//返回该月的第一天

- (NSDate *)beginningOfMonth

{

    return [self dateAfterDay:-[self getDay] + 1];

}

//该月的最后一天

- (NSDate *)endOfMonth

{

    return [[[self beginningOfMonth] dateafterMonth:1] dateAfterDay:-1];

}

//返回当前周的周末

- (NSDate *)endOfWeek {

    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Get the weekday component of the current date

    NSDateComponents *weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:self];

    NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];

    // to get the end of week for a particular date, add (7 - weekday) days

    [componentsToAdd setDay:(7 - [weekdayComponents weekday])];

    NSDate *endOfWeek = [calendar dateByAddingComponents:componentsToAdd toDate:self options:0];

    

    

    return endOfWeek;

}


+ (NSString *)dateFormatString {

    return @"yyyy-MM-dd";

}


+ (NSString *)timeFormatString {

    return @"HH:mm:ss";

}


+ (NSString *)timestampFormatString {

    return @"yyyy-MM-dd HH:mm:ss";

}


// preserving for compatibility

+ (NSString *)dbFormatString {

    return [NSDate timestampFormatString];

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的数字调制就是把数字基带信号的频谱搬移到高频处,形成适合在信道中传输的带通信号基本的数字调制方式有振幅键控(ASK)、频移键控(FSK)、绝对相移键控(PSK)、相对(差分)相移键控(DPSK)在接收端可以基于想干解调或非相干解调还原数字基带信号+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值