OC语言 常用数据类型=>>NSDate & NSCalendar & NSDateFormatter

来源:互联网 发布:域名注册后怎么建网站 编辑:程序博客网 时间:2024/05/16 14:14

日期和时间、使用时区

NSDate & NSCalendar & NSDateFormatter




//

//  main.m

//  Tank-OC07-02

//

//  Created by ibokan on 15/12/17.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Tool.h"


int main(int argc,const char * argv[]) {

    @autoreleasepool {

    

    //NSDate

       //OC中,Foundation框架为我们提供了强大的时间操作类‘NSDate’,该类封装了各种处理时间和日期的API

        

        //创建=获取系统当前时间(GMT Greenwich Mean Time格林尼治标准时间,它与北京时间相差8个小时,北京时间 GMT时间 + 8;   api        api 51

        NSDate *date1 = [NSDatedate];

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

        

        //当前系统时间+100

        //NSTimeInterval 是一个以秒为单位的时间片,也叫时间戳。也可以为负。

        NSDate *date2 = [NSDatedateWithTimeIntervalSinceNow:-60];

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

        

        //获取当前实际时间:+60*60*8

        NSDate *datenow = [NSDatedateWithTimeIntervalSinceNow:60*60*8];

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

        

        //1970110+ 0

        NSDate *date3 = [NSDatedateWithTimeIntervalSince1970:0];

        NSLog(@"date3 = %@",date3);    //1970UNIX Time,纪元年

        

        //距离sinceDate日期timeInterval时间的时间

        NSDate *date4 = [NSDatedateWithTimeInterval:100sinceDate:[NSDatedate]];

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

        

        

        //通过时间追加创建NSDate,同样的返回senconds秒后的时间,如果这个senconds为负的话,就是返回senconds秒前的时间。

        NSDate *date5 = [date4 dateByAddingTimeInterval:100];

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

        

        

        

        

        //时期比较

        //1.两个日期的时间间隔

        //将一个时期转换成时间戳,此时间戳是以1970年为标准,

         NSTimeInterval timeInterval1970 = [[NSDatedate] timeIntervalSince1970];

        NSLog(@"timeInterval1970 = %f",timeInterval1970);

        

        //将一个时间转换成时间戳,此时间戳是以现在为标准

        NSTimeInterval timeIntervalNow = [[NSDatedate]timeIntervalSinceNow];

        NSLog(@"timeIntervalNow = %f",timeIntervalNow);

        

        //2.日期的早晚比较

        NSDate *dateNow = [NSDatedate];

        NSDate *Anhourago = [dateNow dateByAddingTimeInterval:-3600];

        

        //判断两个日期是否相等

        BOOL flag = [dateNow isEqualToDate:Anhourago];

        if (flag) {

            NSLog(@"dateNow = Anhourago");

        }

        

        //判断两个日期的先后,返回较早的日期

        NSDate *date6 = [dateNow earlierDate:Anhourago];

        if ([date6 isEqualToDate:dateNow]) {

            NSLog(@"较早的时间是dateNow");

        }

        else

        {

            NSLog(@"较早时间是Anhourago");

        }

        

        

        //判断两个日期的先后,返回较晚的日期

        NSDate *date7 = [dateNow laterDate:Anhourago];

        if ([date7 isEqualToDate:dateNow]) {

            NSLog(@"较晚的时间是dateNow");

        }

        else

        {

            NSLog(@"较晚的时间是Anhourago");

        }

        

        //比较两个日期的早晚也可以使用我们之前学过的‘compare’;  不加*时都是变量,不是对象

        NSComparisonResult comparisonResult = [dateNowcompare:Anhourago];

        switch (comparisonResult) {    //(一定是整形的)

            caseNSOrderedAscending:

                NSLog(@"dateNow < Anhourago");

                break;

                

            case NSOrderedSame:

                NSLog(@"dateNow = Anhourago");

                break;

                

            caseNSOrderedDescending:

                NSLog(@"dateNow > Anhourago");

                break;

                

            default:

                break;

        }

        

        /*

            NSCalendar

        我们通过NSTimeInterval create a time is conveniront,but不直观,Foundation框架为此为我们提供了NSCalendar,NSCalendar由更自然的日期组成,例如日,月,星期等,可以使用NSDateComponents

         NSCalendar 来创建一个NSDate对象。

        

         */

        

        NSCalendar *currentCalendar = [NSCalendarcurrentCalendar];

        

        NSDateComponents *components = [[NSDateComponentsalloc]init];

        

        components.year = 2015;

        components.month =12;

        components.day = 17;

        components.hour = 22;

        components.minute = 45;

        components.second = 30;          //api 161

        //输出的日期的小时减8

        NSDate *datee = [currentCalendar dateFromComponents:components];

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

        

        

        // NSTimeZone

        // 处理日期和时间经常遇到的一个问题就是时区。Foundation框架提供了NSTimeZone来指定地区日历对象的时区。

        

        //列出所有时区

        NSArray *array = [NSTimeZoneknownTimeZoneNames];

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

        

        //可以指定名称参数创建一个时区

        NSTimeZone *timezone1 = [NSTimeZonetimeZoneWithName:@"Asia/Tokyo"];

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

        

        //可以指定时区缩写创建一个时区

        NSTimeZone *timezone2 = [NSTimeZonetimeZoneWithAbbreviation:@"UTC"];   //PRC 中国


        

        //如何将NSDate转换成 NSStringNSDteFormatter默认转换为本地区时间

        NSDateFormatter *dateFormatter = [NSDateFormatternew];

        

        //设置时区(默认时区)

        dateFormatter.timeZone = [NSTimeZonesystemTimeZone];

        

        //设置时间输出格式

        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

        

//        [dateFormatter setDateFormat:@"yyyyMMdd HHmmss"];

        

        NSString *string = [dateFormatter stringFromDate:[NSDate date]];

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

        

        

        //将时间的类型的字符串转化成日期

        NSString *string1 =@"1970-01-01 08:00:00";

        

        [dateFormatter setTimeZone:[NSTimeZonetimeZoneWithAbbreviation:@"UTC"]];   //UTC GMT

        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

        

        //这里得到的时间是GMT时间

        NSDate *date8 = [dateFormatter dateFromString:string1];

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

        

        

        NSTimeInterval timeInterval = date8.timeIntervalSinceNow;

        NSLog(@"距今已经%f秒了",-timeInterval);

        timeInterval = -timeInterval / 60;

        NSLog(@"%f",timeInterval);

        

        NSLog(@"%f",[[NSDatedate] timeIntervalSince1970]);

        

        

        

        

        

        

        NSString *string2 =@"2015-12-18 08:44:45";

        NSString *string3 = [ToolhandleDate:string];

        NSLog(@"%@",string1);

        

        

        

    }

    return 0;

}


Tool.h////  Tool.h//  Tank-OC07-02////  Created by ibokan on 15/12/17.//  Copyright © 2015年 谭其伟. All rights reserved.//#import <Foundation/Foundation.h>@interface Tool : NSObject//dateString 格式为 :2015-12-17 08:08:08+(NSString *)handleDate:(NSString *)dateString;/* 传入时间与现在时间 差距 60秒以内,输出@“刚刚”;如果 差距 1个小时以内,输出 @“XX分钟” 差距 1-24小时以内,输出 @“xx小时前” 差距 大于一天,输出 @“xx天前” 差距 大于30天,输出 @“xx个月前” 差距 大于365天,输出 @“完整日期” */@end



Tool.m////  Tool.m//  Tank-OC07-02////  Created by ibokan on 15/12/17.//  Copyright © 2015年 谭其伟. All rights reserved.//#import "Tool.h"@implementation Tool+(NSString *)handleDate:(NSString *)dateString{    NSDateFormatter *dateFormatter = [NSDateFormatter new];    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];    NSDate *date1 = [dateFormatter dateFromString:dateString];        NSMutableString *string = [NSMutableString new];    if (date1 = string) {        return @"请按格式输入正确日期";    }    NSTimeInterval timeInterval = date1.timeIntervalSinceNow;    timeInterval *= -1;    if (timeInterval >=0 && timeInterval < 60) {        [string appendString:@"刚刚"];    }    else if (timeInterval >= 60 && timeInterval <3600)    {        int min = timeInterval / 60;        [string appendFormat: @"%d分钟前",min];    }    else if (timeInterval >= 3600 && timeInterval < 3600*24)    {        int hour = timeInterval / 3600;        [string appendFormat:@"%d小时前",hour];    }    else if (timeInterval >= 3600*20 && timeInterval < 3600*24*30)    {        int day = timeInterval / (3600*24);        [string appendFormat:@"%d days ago",day];            }    else if (timeInterval >= 3600*24*30 && timeInterval < 3600*24*30*12)    {        int month = timeInterval/(3600*24*30);        [string appendFormat:@"%d months ago",month];    }    else if (timeInterval >= 3600*24*30*12)    {        int year = timeInterval;        [string appendFormat:@"%@",[NSDate date]];    }    else    {        NSString *string2 = @"请按格式输入正确日期";        [string appendFormat:string2];    }    return string;}@end










输出结果:


2015-12-17 19:26:37.141 Tank-OC07-02[35343:343741] date1= 2015-12-17 11:26:37 +00002015-12-17 19:26:37.142 Tank-OC07-02[35343:343741] date2 = 2015-12-17 11:25:37 +00002015-12-17 19:26:37.143 Tank-OC07-02[35343:343741] date3 = 1970-01-01 00:00:00 +00002015-12-17 19:26:37.143 Tank-OC07-02[35343:343741] date4 = 2015-12-17 11:28:17 +00002015-12-17 19:26:37.143 Tank-OC07-02[35343:343741] date5 =2015-12-17 11:29:57 +00002015-12-17 19:26:37.144 Tank-OC07-02[35343:343741] timeInterval1970 = 1450351597.1437112015-12-17 19:26:37.144 Tank-OC07-02[35343:343741] timeIntervalNow = -0.0000032015-12-17 19:26:37.144 Tank-OC07-02[35343:343741] 较早时间是Anhourago2015-12-17 19:26:37.144 Tank-OC07-02[35343:343741] 较晚的时间是dateNow2015-12-17 19:26:37.145 Tank-OC07-02[35343:343741] dateNow > Anhourago2015-12-17 19:26:37.145 Tank-OC07-02[35343:343741] datee = 2015-12-17 14:45:30 +00002015-12-17 19:26:37.149 Tank-OC07-02[35343:343741] array  = (    "Africa/Abidjan",    "Africa/Accra",    "Africa/Addis_Ababa",<span style="white-space:pre"></span>...................)2015-12-17 19:26:37.156 Tank-OC07-02[35343:343741] timezone1 = Asia/Tokyo (GMT+9) offset 324002015-12-17 19:26:37.157 Tank-OC07-02[35343:343741] string = 2015-12-17 19:26:372015-12-17 19:26:37.158 Tank-OC07-02[35343:343741] date8 = 1970-01-01 08:00:00 +00002015-12-17 19:26:37.159 Tank-OC07-02[35343:343741] 距今已经1450322797.159240秒了2015-12-17 19:26:37.160 Tank-OC07-02[35343:343741] 24172046.6193212015-12-17 19:26:37.160 Tank-OC07-02[35343:343741] 1450351597.160410Program ended with exit code: 0





0 0
原创粉丝点击