IOS_时间处理1

//
//  NSDate+PJ.h
//  时间处理
//
//  Created by pj on 14-8-9.
//  Copyright (c) 2014年 pj. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef struct{
    NSInteger y; // 间隔年
    NSInteger M; // 间隔月
    NSInteger d; // 间隔日
    NSInteger h; // 间隔时
    NSInteger m; // 间隔分
    NSInteger s; // 间隔秒
}PJInterValTime;

@interface NSDate (PJ)
/**
 *
 获取当前时间yyyy-MM-dd hh:mm:ss
 */

+ (NSString *)getTime;


/**
 *
 获取当前时间,后面一个参数填写间隔天数,返回NSDATE
 */
+ (NSDate *)getTimeDayD:(NSInteger)IntervalD;

/**
 *
 获取当前时间,后面一个参数填写间隔月,返回NSDATE
 */
+ (NSDate *)getTimeDayMM:(NSInteger)IntervalD;

/**
 *
 获取当前时间,后面一个参数填写间隔年,返回NSDATE
 */
+ (NSDate *)getTimeDayY:(NSInteger)IntervalD;



/**
 *
 获取当前时间,后面一个参数填写间隔秒,返回NSDATE
 */
+ (NSDate *)getTimeDayS:(NSTimeInterval)IntervalS;

/**
 *
 获取当前时间,后面一个参数填写间小时,返回NSDATE
 */
+ (NSDate *)getTimeDayH:(NSInteger)IntervalS;

/**
 *
 获取当前时间,后面一个参数填写间分,返回NSDATE
 */
+ (NSDate *)getTimeDayM:(NSInteger)IntervalS;

/**
 *
 获取当前时间,后面一个参数填写间隔天数,返回NSString
 */
+ (NSString *)getTimeDayString:(NSInteger)Interval;

/**
 *
格式化时间,默认格式为yyyy-MM-dd hh:mm:ss
 */

+ (NSString *)getFormateDate:(NSDate *)date formate:(NSString *)formate;

/**
 *
 格式化时间,默认格式为yyyy-MM-dd hh:mm:ss,返回PJInterValTime
 */

+ (PJInterValTime)getFormateDatePJ:(NSDate *)date;
/**
 *
 格式化时间,默认格式为yyyy-MM-dd hh:mm:ss,返回PJInterValTime
 */

+ (NSDate*)getFormatePJIntervalTimePJ:(PJInterValTime)date;


/**
 *
 是否为今天
 */

+ (BOOL)isToday:(NSDate *)date;

/**
 *
 是否为今年
 */

+ (BOOL)isYear:(NSDate *)date;

/**
 *
 是否为昨天
 */
+ (BOOL)isYesterday:(NSDate *)date;


/**
 *
 返回2个时间隔,返回秒
 */
+ (long)getTwoDateIntervalS:(NSDate *)date date2:(NSDate *)date2;

/**
 *
 返回2个时间间隔,返回分
 */
+ (long)getTwoDateIntervalM:(NSDate *)date date2:(NSDate *)date2;

/**
 *
 返回2个时间间隔,返回时
 */
+ (long)getTwoDateIntervalH:(NSDate *)date date2:(NSDate *)date2;

/**
 *
 返回2个时间间隔,返回天
 */
+ (long)getTwoDateIntervalD:(NSDate *)date date2:(NSDate *)date2;

/**
 *
 返回2个时间间隔,返回月
 */
+ (long)getTwoDateIntervalMM:(NSDate *)date date2:(NSDate *)date2;

/**
 *
 返回2个时间间隔,返回PJInterValTime
 */
+ (PJInterValTime)getTwoDateInterval:(NSDate *)date date2:(NSDate *)date2;

+ (void)printfPjInterval:(PJInterValTime)pj;

@end



//
//  NSDate+PJ.m
//  时间处理
//
//  Created by pj on 14-8-9.
//  Copyright (c) 2014年 pj. All rights reserved.
//

#import "NSDate+PJ.h"

@implementation NSDate (PJ)
+ (NSString *)getTime
{
    NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
    ndf.dateFormat = @"yyyy-MM-dd hh:mm:ss";
    return [ndf stringFromDate:[NSDate date]];
}

+ (NSDate *)getTimeDayD:(NSInteger)Interval
{
    long dayTimeS = 24 * Interval;
    return [self getTimeDayH:dayTimeS];
}
+ (NSDate *)getTimeDayY:(NSInteger)IntervalD
{
    // 这个怎么做呢? 间隔月,那么我们就要先格式化出日期
    PJInterValTime pj = [self getFormateDatePJ:[NSDate date]];
    pj.y+=IntervalD;
    // 格式化
    return [self getFormatePJIntervalTimePJ:pj];
}
+ (NSDate *)getTimeDayMM:(NSInteger)IntervalD
{
    // 间隔月,那么我们就要先格式化出日期
    PJInterValTime pj = [self getFormateDatePJ:[NSDate date]];
    // 先判断这个IntervalD这个是否大于12个月
    int y = 0;
    int M = 0;
    if (IntervalD > 0) {
        // 说明已经超过了一年
        // 算出年
        y = IntervalD / 12;
        if (IntervalD % 12 != 0) {
            M = IntervalD % 12;
            if (pj.M+M > 12) {
                y+=1;
                M = pj.M + M - 12;
                pj.M = 0;
            }
        }
    }else if(IntervalD < 0)
    {
        // 算出年
        y = IntervalD / 12;
        // 取余数
        int tempM = IntervalD % 12;
        // 如果小于0,先判断月份是否相等
        M = tempM;
        if (-tempM == pj.M) {
            y-=1;
            M=12;
            pj.M = 0;
            // 如果大于我们
        }else if(-tempM > pj.M)
        {
            y-=1;
            M = 12 -(-tempM - pj.M);
            pj.M = 0;
        }
    }
    else
    {
        // 木有超过,直接赋值
        M = IntervalD;
    }
    pj.y += y;
    pj.M += M;
    
    // 格式化
    return [self getFormatePJIntervalTimePJ:pj];
}
/**
 *
 获取当前时间,后面一个参数填写间小时,返回NSDATE
 */
+ (NSDate *)getTimeDayH:(NSInteger)IntervalS
{
    long dayTimeS = 60 * IntervalS;
    return [self getTimeDayM:dayTimeS];
}

/**
 *
 获取当前时间,后面一个参数填写分钟,返回NSDATE
 */
+ (NSDate *)getTimeDayM:(NSInteger)IntervalS
{
    long dayTimeS = 60 * IntervalS;
    return [self getTimeDayS:dayTimeS];
}


+ (NSDate *)getTimeDayS:(NSTimeInterval)IntervalS
{
    NSDate *date = [NSDate date];
    date = [date dateByAddingTimeInterval:IntervalS];
    return date;
}

+ (NSString *)getTimeDayString:(NSInteger)Interval
{
    long dayTimeS = 60 * 60 * 24 * Interval;
    NSDate *date = [NSDate date];
    date = [date dateByAddingTimeInterval:dayTimeS];
    return [self getFormateDate:date formate:nil];
}

+ (NSString *)getFormateDate:(NSDate *)date formate:(NSString *)formate
{
    if (formate == nil) {
        formate = @"yyyy-MM-dd";
    }
    NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
    ndf.dateFormat = formate;
    return [ndf stringFromDate:date];
}

+ (PJInterValTime)getFormateDatePJ:(NSDate *)date
{
    NSString *formate = @"yyyy-MM-dd-hh-mm-ss";
    NSArray *strArray = [[self getFormateDate:date formate:formate] componentsSeparatedByString:@"-"];
    PJInterValTime pj;
    pj.y = [strArray[0] integerValue];
    pj.M = [strArray[1] integerValue];
    pj.d = [strArray[2] integerValue];
    pj.h = [strArray[3] integerValue];
    pj.m = [strArray[4] integerValue];
    pj.s = [strArray[5] integerValue];
    return pj;
}

+ (NSDate*)getFormatePJIntervalTimePJ:(PJInterValTime)date
{
    NSString *formate = @"yyyy-MM-dd-hh-mm-ss";
    NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
    ndf.dateFormat = formate;
    NSString *str = [NSString stringWithFormat:@"%d-%d-%d-%d-%d-%d",date.y,date.M,date.d,date.h,date.m,date.s];
    return [ndf dateFromString:str];
    
}

+ (BOOL)isToday:(NSDate *)date
{
    NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
    ndf.dateFormat = @"yyyy-MM-dd";
    NSString *date1 = [ndf stringFromDate:[NSDate date]];
    NSString *date2 = [ndf stringFromDate:date];
    return [date1 isEqualToString:date2];
}

+ (BOOL)isYear:(NSDate *)date
{
    NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
    ndf.dateFormat = @"yyyy";
    NSString *date1 = [ndf stringFromDate:[NSDate date]];
    NSString *date2 = [ndf stringFromDate:date];
    return [date1 isEqualToString:date2];
}

+ (BOOL)isYesterday:(NSDate *)date
{
    // 是否为昨天,把今天的时间倒退一天
    long dayTimeS = 60 * 60 * 24;
    date = [date dateByAddingTimeInterval:-dayTimeS];
    return [self isToday:date];
}

+ (long)getTwoDateIntervalS:(NSDate *)date date2:(NSDate *)date2
{
    double date1s = [date timeIntervalSinceDate:date2];
    date1s = date1s > 0?date1s+1:date1s-1;
    return date1s;
}


/**
 *
 返回2个时间间隔,返回分
 */
+ (long)getTwoDateIntervalM:(NSDate *)date date2:(NSDate *)date2
{
    long dateInterval = [self getTwoDateIntervalS:date date2:date2];
    return dateInterval / 60.0 ;

    
//    int days=((int)time)/(3600*24);
//    int hours=((int)time)%(3600*24)/3600;
//    NSString *dateContent=[[NSString alloc] initWithFormat:@"%i天%i小时",days,hours];

}

/**
 *
 返回2个时间间隔,返回时
 */
+ (long)getTwoDateIntervalH:(NSDate *)date date2:(NSDate *)date2
{
    long dateInterval = [self getTwoDateIntervalM:date date2:date2];
    return dateInterval / 60.0;
}

/**
 *
 返回2个时间间隔,返回天
 */
+ (long)getTwoDateIntervalD:(NSDate *)date date2:(NSDate *)date2
{
    long dateInterval = [self getTwoDateIntervalH:date date2:date2];
    return dateInterval / 24;
}

/**
 *
 返回2个时间间隔,返回月
 */
+ (long)getTwoDateIntervalMM:(NSDate *)date date2:(NSDate *)date2
{
    // 返回月我们就不能用秒了
    long date1Y = [[self getFormateDate:date formate:@"yyyy"] integerValue];
    long date2Y = [[self getFormateDate:date2 formate:@"yyyy"] integerValue];
    // 计算大小
    long intervalMM = (date2Y - date1Y) * 12; // 乘以12个月
    long date1m = [[self getFormateDate:date formate:@"MM"] integerValue];
    long date2m = [[self getFormateDate:date2 formate:@"MM"] integerValue];
    
    return intervalMM+=date2m-date1m;
    
}
+ (PJInterValTime)getTwoDateInterval:(NSDate *)date date2:(NSDate *)date2
{
    
    // 年的话,我们需要考虑闰年,等等,所以我们用格式化日期
    PJInterValTime p = [self getFormateDatePJ:date];
    PJInterValTime p2 = [self getFormateDatePJ:date2];
    PJInterValTime r;
    r.y = p2.y - p.y;
    r.M = p2.M - p.M;
    r.d = p2.d - p.d;
    r.h = p2.h - p.h;
    r.m = p2.m - p.m;
    r.s = p2.s - p.s;
    
    NSTimeInterval d1 = [date timeIntervalSince1970];
    NSTimeInterval d2 = [date2 timeIntervalSince1970];
    r.s = (d2 - d1);
    r.m = r.s / 60;
    r.h = r.m / 60;
    r.d = r.h / 24;
    
    
        return r;
}
+ (void)printfPjInterval:(PJInterValTime)pj
{
    NSString *str = [NSString stringWithFormat:@"%d年%d月%d日%d时%d分%d秒",pj.y,pj.M,pj.d,pj.h,pj.m,pj.s];
    NSLog(@"%@",str);
}

@end

 

posted @ 2014-08-10 17:20  宝贝,我永远都在  阅读(164)  评论(0)    收藏  举报