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
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值