標籤:
#import <Foundation/Foundation.h>#import "monthModel.h"#import "dayModel.h"#import "SolarAndLunerHeader.h"@interface PublicUtils : NSObject#pragma mark將時間本地化+(NSDate *)getLocalDataWithData:(NSDate *)date;#pragma mark擷取天數+(NSRange)getRangefromSmallUtilInBigUtil:(NSDate *)date;#pragma mark擷取小單位在大單位中得係數,主要用於根據日期獲得今天是星期幾,預設setfirstweekday為1就是從周日開頭的+(NSInteger)getCountFromSmallUtilInBigUtil:(NSDate *)date;#pragma mark 獲得當前月第一天的日期+(NSDate *)getCurrentMonthFirstDay;#pragma mark 獲得次月第一天的日期+(NSDate *)getnextMonthFirstDay;#pragma mark 組裝一個空白資料,當月到次月的資料沒有變化的封裝,具體細節由伺服器中取出的資料再維護一下得出真實的資料+(NSMutableArray *)createFixedDData;#pragma mark 同步月份資料,只是星期同步+(void)copyWeekWithDictionary:(NSMutableArray *)array;@end
/* 1.date 轉 NSDateComponents 通過日曆會將時間本地化 2.反過來,NSDateComponents 轉date 會逆向行為會講轉出來的時間會轉到0時區的時間 總結:本地時間轉NSDateComponents用本地化日曆轉的話,最好將日曆的時區設定為0時區,否則就會2次本地化時間出錯 反過來也一樣。 */#import "PublicUtils.h"@implementation PublicUtils#pragma mark將時間本地化+(NSDate *)getLocalDataWithData:(NSDate *)date{ NSTimeZone *timezone= [NSTimeZone systemTimeZone]; NSInteger interval= [timezone secondsFromGMT]; return [date dateByAddingTimeInterval:interval];}#pragma mark擷取天數+(NSRange)getRangefromSmallUtilInBigUtil:(NSDate *)date{ NSCalendar *calendar = [NSCalendar currentCalendar]; NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date]; return range;}#pragma mark擷取小單位在大單位中得係數,主要用於根據日期獲得今天是星期幾,預設setfirstweekday為1就是從周日開頭的+(NSInteger)getCountFromSmallUtilInBigUtil:(NSDate *)date{ NSCalendar *calendar = [NSCalendar currentCalendar]; return [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:date];}#pragma mark 獲得當前月第一天的日期+(NSDate *)getCurrentMonthFirstDay{ NSDate *date= [NSDate date]; NSCalendar *calender= [NSCalendar currentCalendar]; NSDateComponents *compt= [calender components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:date]; [compt setDay:1]; NSDate *currentdate= [calender dateFromComponents:compt]; return [PublicUtils getLocalDataWithData:currentdate];}#pragma mark 獲得次月第一天的日期+(NSDate *)getnextMonthFirstDay{ NSDate *date= [NSDate date]; NSCalendar *calender= [NSCalendar currentCalendar];//同比下面這個不用轉成0時區 NSDateComponents *compt= [calender components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:date]; if (compt.month==12) { [compt setMonth:compt.month+1]; [compt setYear:compt.year+1]; }else { [compt setMonth:compt.month+1]; } [compt setDay:1]; NSDate *currentdate= [calender dateFromComponents:compt]; return [PublicUtils getLocalDataWithData:currentdate];}#pragma mark 從日期裡面擷取各個元素+(NSDateComponents *)changeToCompontsFromDate:(NSDate *)date{ NSCalendar *calender= [NSCalendar currentCalendar]; [calender setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];//(設定這個的目的,傳進來的是一個本地時間,再用本地是日曆轉一次,就會造成2次本地化就會有誤差,所以將日曆的時區轉成0時區,來避免2次轉換) NSDateComponents *compt= [calender components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond) fromDate:date]; return compt;}
ios-學習點-日曆工具類