博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
时间你懂的,
阅读量:7219 次
发布时间:2019-06-29

本文共 12945 字,大约阅读时间需要 43 分钟。

//

//  TimeUtil.m

//  QTui

//

//  Created by wangyanan on 9/14/15.

//  Copyright (c) 2015 wangyanan. All rights reserved.

//

 

#import "TimeUtil.h"

 

 

@interface TimeUtil()

 

@property(nonatomic,strong) NSCalendar *currentCalendar;

@property(nonatomic,strong) NSDateFormatter *formatter;

@property(nonatomic,strong) NSDateComponents *resultComps;

 

 

@end

@implementation TimeUtil

 

+(TimeUtil *)sharedTimeUtil

{

    static TimeUtil *timeUtil = nil;

    @synchronized(self) {

        if (!timeUtil) {

            timeUtil = [[self alloc]init];

        }

        

    }

    return timeUtil;

    

}

 

 

 

 

 

 

/**

 *  强大的dateCalendar

 date --->dateComponent ---->dateCalendar

 *

 *  @param date

 *

 *  @return

 */

-(NSDateComponents *)dateComponentByDate:(NSDate *)date

{

    NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

    return  [self.currentCalendar components:unitFlags fromDate:date];

}

 

 

 

-(NSString *)startTimeStr:(NSInteger)timeType

{

    NSString *formateStr = nil;

    NSString *returnStr = nil;

    switch (timeType)

    {

        case MHour:

        {

            

            formateStr = @"yyyyMMddHH";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSDateComponents *currentComps = [self dateComponentByDate:date];

            [currentComps setYear:[currentComps year]];

            [currentComps setMonth:[currentComps month]];

            [currentComps setDay:[currentComps day]];

            [currentComps setHour:0];

 

//            [currentComps setHour:[currentComps hour]-12];

            NSDate *returnDate = [self.currentCalendar dateFromComponents:currentComps];

            returnStr = [self.formatter stringFromDate:returnDate];

            break;

        }

            

        case MDay:

        {

            formateStr = @"yyyyMMdd";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSDateComponents *currentComps = [self dateComponentByDate:date];

            [currentComps setYear:[currentComps year]];

            [currentComps setMonth:[currentComps month]];

            [currentComps setDay:[currentComps day]-7];

            [currentComps setHour:0];

            NSDate *returnDate = [self.currentCalendar dateFromComponents:currentComps];

            returnStr = [self.formatter stringFromDate:returnDate];

            break;

        }

        case MWeek:

        {

            formateStr = @"yyyyww";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSDateComponents *currentComps = [self dateComponentByDate:date];

            //            [currentComps setWeekOfYear:[currentComps weekOfYear]-4];

            

            

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

            [mComps setYear:[currentComps year]];

            [mComps setWeekday:[currentComps weekday]];

            [mComps setWeekOfYear:[currentComps weekOfYear]-4];

            

            

            NSDate *returnDate = [self.currentCalendar dateFromComponents:mComps];

            returnStr = [self.formatter stringFromDate:returnDate];

            break;

        }

            

        default:

        {

            formateStr = @"yyyyMM";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSDateComponents *currentComps = [self dateComponentByDate:date];

            //            [currentComps setYear:[currentComps year]];

            [currentComps setMonth:[currentComps month]-4];

            NSDate *returnDate = [self.currentCalendar dateFromComponents:currentComps];

            returnStr = [self.formatter stringFromDate:returnDate];

            break;

        }

    }

    TTLog(@"....%@",returnStr);

    return returnStr;

    

}

 

 

 

-(NSString *)endTimeStr:(NSInteger)timeType

{

    NSString *formateStr = nil;

    NSString *returnStr = nil;

    switch (timeType)

    {

        case MHour:

        {

            

            formateStr = @"yyyyMMddHH";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSDateComponents *currentComps = [self dateComponentByDate:date];

            [currentComps setYear:[currentComps year]];

            [currentComps setMonth:[currentComps month]];

            [currentComps setDay:[currentComps day]];

            [currentComps setHour:12];

            NSDate *returnDate = [self.currentCalendar dateFromComponents:currentComps];

            returnStr = [self.formatter stringFromDate:returnDate];

            break;

        }

            

        case MDay:

        {

            formateStr = @"yyyyMMdd";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            returnStr = [self.formatter stringFromDate:date];

            break;

        }

        case MWeek:

        {

            formateStr = @"yyyyww";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            returnStr = [self.formatter stringFromDate:date];

            break;

        }

            

        default:

        {

            formateStr = @"yyyyMM";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            returnStr = [self.formatter stringFromDate:date];

            break;

        }

    }

    TTLog(@"....%@",returnStr);

    return returnStr;

}

 

 

 

/**

 *  显示在X轴的时间格式

 *

 *  @param

 *

 *  @return

 */

-(NSArray *)sTimeWithType:(StatisTimeType)type

{

    NSString *formateStr = nil;

    NSString *returnStr = nil;

    NSMutableArray *returnArray = [NSMutableArray array];

    switch (type) {

        case MHour:

        {

            //            yyyy-MM-dd HH:mm:ss.fff

            //            按小=2015082010,按天=20150820,按周=201534,按月份=201508</li>

            

            formateStr = @"yyyyMMddHH";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            [self.resultComps setYear:[currentComps year]];

            [self.resultComps setMonth:[currentComps month]];

            [self.resultComps setDay:[currentComps day]];

            

            //            for(int i =0;i<12;i++){

            for(int i =11;i>-1;i--){

                [self.resultComps setHour:[currentComps hour]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

                self.formatter.dateFormat = @"HH";

                returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

                

            }

            break;

        }

        case MDay:

        {

            formateStr = @"yyyyMMdd";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            [self.resultComps setYear:[currentComps year]];

            [self.resultComps setMonth:[currentComps month]];

            

            for(int i =6;i>-1;i--){

                [self.resultComps setDay:[currentComps day]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

                self.formatter.dateFormat = @"MMdd";

                returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

                

            }

            

            break;

        }

        case MWeek:

        {

            

            formateStr = @"yyyyww";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

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

            [mComps setYear:[currentComps year]];

            [mComps setWeekday:[currentComps weekday]];

            

            

            NSMutableArray *tempArray = [NSMutableArray array];

            

            for(int i =3;i>-1;i--){

                [mComps setWeekOfYear:[currentComps weekOfYear]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:mComps];

                self.formatter.dateFormat = @"yyyyww";

                NSString *returnStr = [self.formatter stringFromDate:returnDate];

                [tempArray addObject:returnStr];

            }

            

            

            for (NSString *timeStr in tempArray) {

                self.formatter.dateFormat = @"yyyyww";

                NSDate *mDate = [self.formatter dateFromString:timeStr];

                currentComps = [self.currentCalendar components:unitFlags fromDate:mDate];

                [mComps setYear:[currentComps year]];

                [mComps setMonth:[currentComps month]];

                [mComps setDay:[currentComps day]];

                self.formatter.dateFormat = @"MM.dd";

                NSDate *returnDate = [self.currentCalendar dateFromComponents:mComps];

                NSString * strOne = [self.formatter stringFromDate:returnDate];

                [mComps setDay:[currentComps day]+6];

                returnDate = [self.currentCalendar dateFromComponents:mComps];

                NSString * strTwo = [self.formatter stringFromDate:returnDate];

                returnStr = [NSString stringWithFormat:@"%@-%@",strOne,strTwo];

                [returnArray addObject:returnStr];

            }

            

            

            break;

        }

            

        default:

        {

            formateStr = @"yyyyMM";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            [self.resultComps setYear:[currentComps year]];

            [self.resultComps setDay:[currentComps day]];

            [self.resultComps setHour:[currentComps hour]];

            

            for(int i =3;i>-1;i--){

                [self.resultComps setMonth:[currentComps month]-i];

                self.formatter.dateFormat  = @"yyyyMM";

                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

                returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

            }

            

            break;

        }

            

            

    }

    

    

    return returnArray;

}

 

 

 

 

 

 

 

/**

 *  传递给服务器的时间格式

 *

 *  @param type

 *

 *  @return

 */

 

-(NSArray *)tTimeWithType:(StatisTimeType)type

{

    NSString *formateStr = nil;

    NSString *returnStr = nil;

    NSMutableArray *returnArray = [NSMutableArray array];

    switch (type) {

        case MHour:

        {

            //            yyyy-MM-dd HH:mm:ss.fff

            //            按小=2015082010,按天=20150820,按周=201534,按月份=201508</li>

            

            formateStr = @"yyyyMMddHH";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            [self.resultComps setYear:[currentComps year]];

            [self.resultComps setMonth:[currentComps month]];

            [self.resultComps setDay:[currentComps day]];

            

            

            for(int i =11;i>-1;i--){

                [self.resultComps setHour:[currentComps hour]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

                returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

                

            }

            //            for(int i =0;i<12;i++){

            //                [self.resultComps setHour:i];

            //                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

            //                returnStr = [self.formatter stringFromDate:returnDate];

            //                [returnArray addObject:returnStr];

            //

            //            }

            break;

        }

        case MDay:

        {

            formateStr = @"yyyyMMdd";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            [self.resultComps setYear:[currentComps year]];

            [self.resultComps setMonth:[currentComps month]];

            

            for(int i =6;i>-1;i--){

                [self.resultComps setDay:[currentComps day]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

                returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

                

            }

            

            break;

        }

        case MWeek:

        {

            

            formateStr = @"yyyyww";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            

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

            [mComps setYear:[currentComps year]];

            [mComps setWeekday:[currentComps weekday]];

            

            for(int i =3;i>-1;i--){

                [mComps setWeekOfYear:[currentComps weekOfYear]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:mComps];

                NSString *returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

            }

            break;

        }

            

        default:

        {

            formateStr = @"yyyyMM";

            self.formatter.dateFormat = formateStr;

            NSDate *date = [NSDate date];

            NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond|NSCalendarUnitWeekOfYear;

            NSDateComponents *currentComps = [self.currentCalendar components:unitFlags fromDate:date];

            [self.resultComps setYear:[currentComps year]];

            [self.resultComps setDay:[currentComps day]];

            [self.resultComps setHour:[currentComps hour]];

            

            for(int i =3;i>-1;i--){

                [self.resultComps setMonth:[currentComps month]-i];

                NSDate *returnDate = [self.currentCalendar dateFromComponents:self.resultComps];

                returnStr = [self.formatter stringFromDate:returnDate];

                [returnArray addObject:returnStr];

            }

            break;

        }

            

    }

    

    

    return returnArray;

}

 

 

 

 

 

-(NSDateFormatter *)formatter

{

    if (!_formatter) {

        _formatter = [[NSDateFormatter alloc]init];

    }

    return _formatter;

}

 

-(NSCalendar *)currentCalendar

{

    if (!_currentCalendar) {

        

        _currentCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

        

    }

    return _currentCalendar;

}

 

-(NSDateComponents *)resultComps

{

    if (!_resultComps) {

        _resultComps = [[NSDateComponents alloc]init];

    }

    return _resultComps;

}

 

@end

转载于:https://www.cnblogs.com/guligei/p/5060937.html

你可能感兴趣的文章
矩阵求导与投影梯度相关问题
查看>>
SVN
查看>>
C语言编程写的一个http下载程序(王德仙)2012-04-08
查看>>
CCF201409-3 字符串匹配(100分)
查看>>
UVALive2203 UVa10042 Smith Numbers【质因数分解+素数判定+数位之和】
查看>>
Project Euler Problem 9: Special Pythagorean triplet
查看>>
HDU5701 中位数计数【中位数】
查看>>
Python 深浅拷贝 (Shallow copy and Deep copy in Python)
查看>>
Axure
查看>>
屏幕截取工具
查看>>
C语言第七次作业---要死了----
查看>>
Jquery事件绑定冲突
查看>>
偶现bug如何处理?
查看>>
yum命令简介
查看>>
【Udacity】朴素贝叶斯
查看>>
看漫画,学 Redux
查看>>
Spark Streaming揭秘 Day19 架构设计和运行机制
查看>>
【转载】WinCE OAL中的电源管理函数
查看>>
【iOS】Objective-C简约而不简单的单例模式
查看>>
Java实现扫码二维码登录
查看>>