iOS 日历时间日期的用法总结

//重写time的getter方法,获取时间

- (NSString *)time {

 NSDate *date=[NSDate date];//获取当前的时间--这个获取的是格林尼治时间;要获得北京时间还需要+8;

 当前时间:2017-08-01 22:58:46 +0000

 

NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间

 

 

 

NSDate date];获取的是GMT时间,这个时间和北京时间相差8个小时,


获取背北京时间:

 

 NSDate *date = [NSDatedate];

    NSTimeZone *zone = [NSTimeZone systemTimeZone];

    NSInteger interval = [zone secondsFromGMTForDate: date];

    NSDate *localeDate = [date  dateByAddingTimeInterval: interval];  

 

===========

 

 NSDate *date=[NSDatedateWithTimeIntervalSinceNow:600];//从现在开始计算600秒后是什么时间

 

    //把数字的日期,转换成日期对象

 

   NSDate *date = [NSDate dateWithTimeIntervalSince1970:6000000];//

//以1970年一月一日0点计算开始,6000000后是哪一个时间;

nowdate = [nowdate dateByAddingTimeInterval:60 * 60 * 24];//在当前时间的基础上增加60 * 60 * 24秒后得到的时间

   

 

// 将日期转为字符串

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

//    ndf.dateFormat = @"yyyy-MM-dd HH:mm:ss";年月日时分秒

    ndf.dateFormat =@"MM-dd HH:mm";

    return [ndf stringFromDate:date];// 将日期转为字符串

    NSDate *deadDate = [fmt dateFromString:@"2014-10-24"];//将字符串转换为日期类型

}

 

   NSTimeInterval *intvaltime=[date1  timeIntervalSincedate:date2];//时间间--date1减去date2的差值

 

 

    

//============

G:         公元时代,例如AD公元
yy:     年的后2yyyy:     完整年
MM:     月,显示为1-12,带前置0
MMM:     月,显示为英文月份简写,如 Jan
MMMM:     月,显示为英文月份全称,如 Janualy
dd:     日,2位数表示,如02
d:         日,1-2位显示,如2,无前置0
EEE:     简写星期几,如Sun
EEEE:     全写星期几,如Sunday
aa:     上下午,AM/PM
H:         时,24小时制,0-23
HH:     时,24小时制,带前置0
h:         时,12小时制,无前置0
hh:     时,12小时制,带前置0
m:         分,1-2mm:     分,2位,带前置0
s:         秒,1-2ss:     秒,2位,带前置0
S:         毫秒
Z:        GMT(时区)

====================================

//NSCalendar封装了系统如何按照年月日的方式来组织时间,快速获取日期对象的年月日、时分秒等相关信息。

    

   // 1.++++++++++++++获取当前时间

    

    NSCalendar *calendar = [NSCalendar currentCalendar];//当前的日历

    NSDateComponents  *components  =  [calendar components:NSCalendarUnitMinute |NSCalendarUnitMonth | NSCalendarUnitHour | NSCalendarUnitDay fromDate:[NSDate date]];//当前日期的部分定义

    NSLog(@"%ld%ld%ld%ld" ,(long)components.month,(long)components.day,(long)components.hour,(long)components.minute);

    

    //2.+++++++++++++查看今天是在今年的第几周

    

    NSCalendar *calendar1 = [NSCalendar currentCalendar];

    NSInteger week = [calendar1 ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitYear forDate:[NSDate date]];//今天是今年的第几周

    NSLog(@"今天是今年的第%ld",(long)week);

    

   // 3.+++++++++++++++现在往后3天2小时的日历

    

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

    components2.year = 0;

    components2.day = 3;

    components2.hour = 2;

    NSCalendar *calendar3 = [NSCalendar currentCalendar];

    NSDate *currentDate = [NSDate date];

    NSDate *nextData = [calendar3 dateByAddingComponents:components2 toDate:currentDate 

options:NSCalendarMatchStrictly];//在现在的基础上加上components2中的相应部分后得到的日期

    NSDateFormatter * formatter1 = [[NSDateFormatteralloc]init];

    formatter1.dateFormat =@"yyyy年MM月dd日hh时mm分ss秒";

    NSString * str1 = [formatter1stringFromDate:nextData];


、、===================

字符说明

(:)

时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由您的应用程序的当前区域性值确定。

(/)

日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由您的应用程序的当前区域性确定。

(%)

用于表明不论尾随什么字母,随后字符都应该以单字母格式读取。也用于表明单字母格式应以用户定义格式读取。有关更多详细信息,请参见下面的内容。

d

将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %d。

dd

将日显示为带前导零的数字(如 01)。

EEE

将日显示为缩写形式(例如 Sun)。

EEEE

将日显示为全名(例如 Sunday)。

M

将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %M。

MM

将月份显示为带前导零的数字(例如 01/12/01)。

MMM

将月份显示为缩写形式(例如 Jan)。

MMMM

将月份显示为完整月份名(例如 January)。

gg

显示时代/纪元字符串(例如 A.D.)

h

使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h。

hh

使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。

H

使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H。

HH

使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。

m

将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %m。

mm

将分钟显示为带前导零的数字(例如 12:01:15)。

s

将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用 %s。

ss

将秒显示为带前导零的数字(例如 12:15:05)。

f

显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f。

t

使用 12 小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M 之间的任一小时显示大写的 P。如果这是用户定义的数字格式中的唯一字符,请使用 %t。

tt

对于使用 12 小时制的区域设置,对中午之前任一小时显示大写的 AM,对中午到 11:59 P.M 之间的任一小时显示大写的 PM。

对于使用 24 小时制的区域设置,不显示任何字符。

y

将年份 (0-9) 显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用 %y。

yy

以带前导零的两位数字格式显示年份(如果适用)。

yyy

以四位数字格式显示年份。

yyyy

以四位数字格式显示年份。

z

显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用 %z。

zz

显示带前导零的时区偏移量(例如 -08)

zzz

显示完整的时区偏移量(例如 -08:00)

 


格式显示

M/d/yy

12/7/58

d-MMM

7-Dec

d-MMMM-yy

7-December-58

d MMMM

7 December

MMMM yy

December 58

hh:mm tt

08:50 PM

h:mm:ss t

8:50:35 P

H:mm

20:50

H:mm:ss

20:50:35

M/d/yyyy H:mm

12/7/1958 20:50

 

IOS NSDate日期操作总结

1 // 当前时间创建NSDate

        NSDate *myDate = [NSDate date];

        NSLog(@"myDate = %@",myDate);

2 //从现在开始的24小时

        NSTimeInterval secondsPerDay = 24*60*60;

        NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];

        NSLog(@"myDate = %@",tomorrow);

3//根据已有日期创建日期

         NSTimeInterval secondsPerDay1 = 24*60*60;

        NSDate *now = [NSDate date];

        NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1];

        NSLog(@"yesterDay = %@",yesterDay);

 

 4//比较日期

        BOOL sameDate = [now isEqualToDate:yesterDay];

        NSLog(@"sameDate = %lu",sameDate);

        4.1//获取较早的日期

        NSDate *earlierDate = [yesterDay earlierDate:now];

        NSLog(@"earlierDate  = %@",earlierDate);

        4.2//较晚的日期

        NSDate *laterDate = [yesterDay laterDate:now];

        NSLog(@"laterDate  = %@",laterDate);

 

        //两个日期之间相隔多少秒

        NSTimeInterval secondsBetweenDates= [yesterDay timeIntervalSinceDate:now];

        NSLog(@"secondsBetweenDates=  %lf",secondsBetweenDates);

        //通过NSCALENDAR类来创建日期

        NSDateComponents *comp = [[NSDateComponentsalloc]init];

        [comp setMonth:06];

        [comp setDay:01];

        [comp setYear:2001];

        NSCalendar *myCal = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];

        NSDate *myDate1 = [myCal dateFromComponents:comp];

        NSLog(@"myDate1 = %@",myDate1);

 

        //从已有日期获取日期

        unsigned units  = NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit;

        NSDateComponents *comp1 = [myCal components:units fromDate:now];

        NSInteger month = [comp1 month];

        NSInteger year = [comp1 year];

        NSInteger day = [comp1 day];

        //NSDateFormatter实现日期的输出

        NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

        [formatter setDateStyle:NSDateFormatterFullStyle];//直接输出的话是机器码

        //或者是手动设置样式[formatter setDateFormat:@"yyyy-mm-dd"];

        NSString *string = [formatter stringFromDate:now];

        NSLog(@"string = %@",string);

        NSLog(@"formater = %@",formatter);

 

 

//获取日期格式对象

- (NSDateFormatter *)dateFormatter {

if (dateFormatter == nil) {

dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

}

return dateFormatter;

}

 

NSDate与NSDateFormatter的相关用法

 

1.NSDateFormatter配合NSDate与NSString之间的转化
  NSDateFormatter有下面2个方法:
  - (NSString *)stringFromDate:(NSDate *)date;//NSDate转NSString
  - (NSDate *)dateFromString:(NSString *)string;//NSString转NSDate
 
e.g.
 NSString *dateString=@"1900-01-01";
 NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
 [dateFormatter setDateFormat:@"yyyy-MM-dd"];
 NSDate *date=[dateFormatter dateFromString:dateString];
 [dateFormatter release];

 NSString转NSDate与上面类似
 NSString *dateString=[dateFormatter dateFromString:[NSDate date]];

2.NSDateFormatter 的一些格式介绍
  [dateFormatter setDateFormat:@"yyyy年MM月dd日#EEEE"];EEEE为星期几,EEE为周几
  [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  [dateFormatter setDateFormat:@"yyyy年MMMMd日"];//MMMM 为xx月,一个d可以省去01日前的0

3.NSString转NSDate少一天的解决办法
 用下面这种格式化方式 
  1.[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

  2.
   NSCalendar *calendar = [NSCalendar currentCalendar];
   NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit |                                  NSYearCalendarUnit) fromDate:[NSDate date]];
   NSDate *todayDate = [calendar dateFromComponents:components];

 

/**
 日历和NSdate操作
 
 */

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIResponder (LYBGetInfoFromCanlinder)
//1.不同时区时间的转换---格林尼治标准时间准时间转换成当地时间
- (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate;
//计算多少秒之前、分之前。。。。
-(void)caculatesometimeAgo;
// 比较两个时间
-(void)compareDate;
//根据日期或者日期字符串显示今天和昨天
-(void)setTodayAndYestodayWithDate:(NSDate *)somedate dateStr:(NSString *)somedateStr;
//获取当前时间日历的年月日,时分秒
-(NSDictionary *)canchangeBank;
@end

NS_ASSUME_NONNULL_END


*******
/**
 日历和NSdate操作
 */
#import "UIResponder+LYBGetInfoFromCanlinder.h"

@implementation UIResponder (LYBGetInfoFromCanlinder)
//1.不同时区时间的转换---格林尼治标准时间准时间转换成当地时间
- (NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate
{
    //设置源日期时区
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];//或GMT
    //设置转换后的目标日期时区
    NSTimeZone* destinationTimeZone = [NSTimeZone localTimeZone];//当地时间
    //得到源日期与世界标准时间的偏移量
    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:anyDate];
    //目标日期与本地时区的偏移量
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:anyDate];
    //得到时间偏移量的差值
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
    //转为现在时间
    NSDate* destinationDateNow = [[NSDate alloc] initWithTimeInterval:interval sinceDate:anyDate] ;
    return destinationDateNow;
}

//计算时间日期多少秒之前、分之前。。。。
-(NSDictionary *)caculatesometimeAgoWithdatestr:(NSString *)datestr{
    NSString *createdAtString = datestr;
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *createdAtDate = [fmt dateFromString:createdAtString];
    NSCalendar *calendar = [NSCalendar currentCalendar];//获取当前的日历
    //获取秒部分
    NSDateComponents*  components = [calendar components:NSCalendarUnitSecond fromDate:createdAtDate toDate:[NSDate date] options:0];
    NSString *year=@"";//
    NSString *month=@"";
    NSString *week=@"";
    NSString *day=@"";
    NSString *hour=@"";
    NSString *minute=@"";
    NSString *second=@"";
    if(components.second <60) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd秒以前",components.second]);
        second=[NSString stringWithFormat:@"%ld",(long)components.second];
    }
    //获取分钟部分
    components =[calendar components:NSCalendarUnitMinute fromDate:createdAtDate
                              toDate:[NSDate date]options:0];
    if(components.minute <60) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd分钟以前",components.minute]);
        minute=[NSString stringWithFormat:@"%ld",(long)components.minute];
        
    }
    //获取小时部分
    components = [calendar components:NSCalendarUnitHour fromDate:createdAtDate toDate:[NSDate date]options:0];
    if(components.hour <24) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd小时以前",components.hour]);
        hour=[NSString stringWithFormat:@"%ld",(long)components.hour];
    }
    
    //获取天部分
    components = [calendar components:NSCalendarUnitDay fromDate:createdAtDate toDate:[NSDate date]options:0];
    if(components.day <30) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd天以前",components.day]);
        day=[NSString stringWithFormat:@"%ld",(long)components.day];
    }
    
    //获取week部分
    components = [calendar components:NSCalendarUnitWeekday fromDate:createdAtDate toDate:[NSDate date]options:0];
    if(components.weekday <52) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd星期以前",components.weekday]);
        week=[NSString stringWithFormat:@"%ld",(long)components.weekday];
    }
    
    //获取月部分
    components = [calendar components:NSCalendarUnitMonth fromDate:createdAtDate toDate:[NSDate date]options:0];
    if(components.month <12) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd小时以前",components.month]);
        month=[NSString stringWithFormat:@"%ld",(long)components.month];
    }
    //获取年部分
    components = [calendar components:NSCalendarUnitYear fromDate:createdAtDate toDate:[NSDate date]options:0];
    if(components.year <10) {
        NSLog(@"--%@",[NSString stringWithFormat:@"%zd年以前",components.year]);
        year= [NSString stringWithFormat:@"%ld",(long)components.year];
    }
    NSDictionary *dict=@{
                         @"year":components.year?year:@"",
                         @"month":month?month:@"",
                         @"day":day?day:@"",
                         @"week":week?week:@"",
                         @"hour":hour?hour:@"",
                         @"minute":minute?minute:@"",
                         @"sec":second?second:@""
                         };
    return dict;
    
}

// 比较两个时间
-(void)compareDate{
    // 时间字符串
    NSString *createdAtString = @"2015-11-20 11:10:05";
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *createdAtDate = [fmt dateFromString:createdAtString];
    
    // 当前时间
    NSDate *fnowDate = [NSDate date];
    
    /**
     NSComparisonResult的取值
     NSOrderedAscending = -1L, // 升序, 越往右边越大
     NSOrderedSame,  // 相等
     NSOrderedDescending // 降序, 越往右边越小
     */
    // 获得比较结果(谁大谁小)
    NSComparisonResult result = [fnowDate compare:createdAtDate];
    if (result == NSOrderedAscending) { // 升序, 越往右边越大
        NSLog(@"createdAtDate > nowDate");
    } else if (result == NSOrderedDescending) { // 降序, 越往右边越小
        NSLog(@"createdAtDate < nowDate");
    } else {
        NSLog(@"createdAtDate == nowDate");
    }
}
//根据日期或者日期字符串显示今天和昨天
-(NSString *)setTodayAndYestodayWithDate:(NSDate *)somedate dateStr:(NSString *)somedateStr{
    //某一天的时间
    NSDateFormatter *format=[[NSDateFormatter alloc]init];
    format.timeZone = [NSTimeZone systemTimeZone];//设置时区
    format.dateFormat=@"yyyy-MM-dd";
    NSString *datestr;
    if(somedateStr){
        datestr=somedateStr;
    }else {
        datestr=[format stringFromDate:somedate];//某一天日期字符串
    }
    NSDate *forDate=[format dateFromString:datestr];//日期
    
    // 今天的时间
    NSDate *today=[[NSDate alloc]init];
    NSDateFormatter *todayformat=[[NSDateFormatter alloc]init];
    todayformat.timeZone = [NSTimeZone systemTimeZone];//设置时区
    todayformat.dateFormat=@"yyyy-MM-dd";
    NSString *todaydatestr=[todayformat stringFromDate:today];//日期字符串
    NSDate *forToday=[format dateFromString:todaydatestr];//日期
    
    //获得nowDate和selfDate的差距---判断是否是昨天
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *cmps = [calendar components:NSCalendarUnitDay fromDate:forDate  toDate:forToday options:0];
    NSString *daystr=@"";
    if([datestr isEqualToString:todaydatestr]){
        NSLog(@"今天");
        datestr=@"今天";
    }else if(cmps.day== 1){
        NSLog(@"昨天");
        datestr=@"昨天";
    }else {
        if(datestr.length>6){
            NSLog(@"当前时间---%@",[datestr substringFromIndex:5]);//左边包括,到结尾
        }
    }
    
    return daystr;
}

//获取当前时间日历的年月日,时分秒

-(NSDictionary *)canchangeBank{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit type =NSCalendarUnitYear |NSCalendarUnitWeekday|
    NSCalendarUnitMonth |
    NSCalendarUnitDay |
    NSCalendarUnitHour |
    NSCalendarUnitMinute |
    NSCalendarUnitSecond;
    
    NSDateComponents *cmps = [calendar components:type fromDate:[NSDate date]];
    
    NSLog(@"%ld日%ld月%ld日%ld小时%ld分钟%ld秒钟", cmps.weekday, cmps.month, cmps.day, cmps.hour, cmps.minute, cmps.second);
    
    NSString *year=[NSString stringWithFormat:@"%ld",cmps.year];//
    NSString *month=[NSString stringWithFormat:@"%ld",cmps.month];
    NSString *day=[NSString stringWithFormat:@"%ld",cmps.day];
    NSString *week=[NSString stringWithFormat:@"%ld",cmps.weekday];
    NSString *hour=[NSString stringWithFormat:@"%ld",cmps.hour];
    NSString *minute=[NSString stringWithFormat:@"%ld",cmps.minute];
    NSString *second=[NSString stringWithFormat:@"%ld",cmps.second];
    NSDictionary *dict=@{
                         @"year":year?year:@"",
                         @"month":month?month:@"",
                         @"day":day?day:@"",
                         @"week":week?week:@"",
                         @"hour":hour?hour:@"",
                         @"minute":minute?minute:@"",
                         @"sec":second?second:@""
                         };
    return dict;
    
}
@end
//多长时间前
-(NSString *)copmarenowDateone:(NSString *)dateonestr witholdDatetwo:(NSString *)datetwostr{
    NSDateFormatter *fmt = [[NSDateFormatter alloc]init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *dateone = [fmt dateFromString:dateonestr];//将字符串转换为日期类型 ;
    NSDate *twoDate = [fmt dateFromString:datetwostr];//将字符串转换为日期类型 ;
    NSString *str=@"";
    NSTimeInterval intvaltime=[dateone  timeIntervalSinceDate:twoDate];
    SLog(@"间隔描述%f",intvaltime);
    if(intvaltime>7*24*60*60){
        str=@"1星期前";
    }else if(intvaltime>24*60*60){
        str=@"1天前";
    } else if(intvaltime>0.5*60*60){
        str=@"30分钟时前";
    }
    
    return str;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值