zoukankan      html  css  js  c++  java
  • iOS开发日期处理



    Foundation框架之 日期与时间

    #import"ViewController.h"@interfaceViewController() {

    NSTimer*_timer;//定时器对象

    NSInteger_count;//用于定时器附加参数}

    @end

    @implementationViewController

    - (void)viewDidLoad {

    [superviewDidLoad];

    /*

    ----------日期与时间----------

    Objective -C为处理日期、时间提供了NSDate、NSCalendar对象,还提供了日期格式器来处理日期与

    字符串之间的转换。

    */

    //获取代表当前日期、时间的NSDate (默认0时区,与北京时间相差8小时)

    NSDate*date = [NSDatedate];//输出:2015-12-16 00:39:52 +0000 (此时的北京时间:2015-12-16 08:39:52 +0000)

    //获取从当前时间开始,一天之后的日期

    NSDate*date2 = [NSDatedateWithTimeIntervalSinceNow:60*60*24];

    //获取从当前时间开始,三天之前的日期

    NSDate*date3 = [NSDatedateWithTimeIntervalSinceNow:-3*3600*24];

    //获取从1970年1月1日开始,20年之后的日期

    NSDate*date4 = [NSDatedateWithTimeIntervalSince1970:3600*24*366*20];

    /*

    获取系统当前的NSLocale,NSLocale代表一个语言,国际环境,比如大陆的简体中文,就可通过

    NSLocale对象来代表,同样一个日期,在不同的语言、国际环境下,显示出来的字符串是不同的。*/

    NSLocale*locale = [NSLocalecurrentLocale];//获取NSDate在当前NSLocale下对应的字符串

    [datedescriptionWithLocale:locale];//输出:2015年12月15日星期二中国标准时间下午7:11:12NSDate*earlier = [date2earlierDate:date3];//获取两个日期之间的较早日期(date3)NSDate*later = [date2laterDate:date3];//获取两个日期之间的较晚日期(date2)

    /*

    比较两个日期,compare:方法返回NSComparisonResult枚举值,该枚举类型包含

    NSOrderedAscending、NSOrderedSame和NSOrderedDescending三个值,分表代表调用compare:的日

    期位于被比较日期之前、相同、之后。

    */

    switch([date2compare:date3]) {

    caseNSOrderedAscending:NSLog(@"date2位于date3之前");break;

    caseNSOrderedSame:NSLog(@"date2与date3相同");

    caseNSOrderedDescending:NSLog(@"date2位于date3之后");

    default:break;

    }

    //获取两个时间之间的差

    /*

    ----------日期格式器(NSDateFormatter)----------

    NSDateFormatter代表一个日期格式器,它的功能就是完成NSDate与NSString之间的转换。NSDateFormatter的setDateStyle、setTimeStyle方法可以设置格式化日期、时间的风格,其中,日

    //输出语句

    //返回值NSTimeInterval (double类型),输出:[date2timeIntervalSinceNow];//获取指定时间与现在的时间差

    [date2timeIntervalSinceDate:date3];345600.000000 (秒数)

    期、时间风格支持如下几个枚举值:

    NSDateFormatterNoStyle;不显示日期、时间风格NSDateFormatterShortStyle;显示"短"的日期、时间风格NSDateFormatterMediumStyle;显示"中等"的日期、时间风格NSDateFormatterLongStyle;显示"完整"的日期、时间风格*/

    NSDate*date5 = [NSDatedateWithTimeIntervalSince1970:3600*24*366*20];1970年1月1日开始,20年之后的日期

    //创建两个NSLocele,分别代表中国、美国

    NSLocale*locales[] = {[NSLocalelocaleWithLocaleIdentifier:@"zh_CN"],

    [NSLocalelocaleWithLocaleIdentifier:@"en_US"]};

    NSDateFormatter*dateFormater[7];//创建一个NSDateFormatter数组for(inti =0; i <2; i++) {

    // ----------1. ShortStyle的日期、时间风格|| NSLocale----------dateFormater[i *4] = [[NSDateFormatteralloc]init];

    [dateFormater[i *4]setDateStyle:NSDateFormatterShortStyle];

    [dateFormater[i *4]setTimeStyle:NSDateFormatterShortStyle];

    [dateFormater[i *4]setLocale:locales[i]];

    //获取从

    // ----------2. MediumStyle的日期、时间风格|| NSLocale----------dateFormater[i *4+1] = [[NSDateFormatteralloc]init];

    [dateFormater[i *4+1]setDateStyle:NSDateFormatterMediumStyle];

    [dateFormater[i *4+1]setTimeStyle:NSDateFormatterMediumStyle];

    [dateFormater[i *4+1]setLocale:locales[i]];

    // ----------3. LongStyle的日期、时间风格|| NSLocale----------dateFormater[i *4+2] = [[NSDateFormatteralloc]init];

    [dateFormater[i *4+2]setDateStyle:NSDateFormatterLongStyle];

    [dateFormater[i *4+2]setTimeStyle:NSDateFormatterLongStyle];

    [dateFormater[i *4+2]setLocale:locales[i]];

    // ----------4. FullStyle的日期、时间风格|| NSLocale----------dateFormater[i *4+3] = [[NSDateFormatteralloc]init];

    [dateFormater[i *4+3]setDateStyle:NSDateFormatterFullStyle];

    [dateFormater[i *4+3]setTimeStyle:NSDateFormatterFullStyle];

    [dateFormater[i *4+3]setLocale:locales[i]];

    }

    for(inti =0; i <2; i++) {

    switch(i) {

    case0:NSLog(@"----------中国日期格式----------");break;

    case1:NSLog(@"----------美国日期格式----------");

    default:break;

    }

    NSLog(@"Short格式日期:%@", [dateFormater[i *4]stringFromDate:date5]);NSLog(@"Medium格式日期:%@", [dateFormater[i *4+1]stringFromDate:date5]);NSLog(@"Long格式日期:%@", [dateFormater[i *4+2]stringFromDate:date5]);NSLog(@"Full格式日期:%@", [dateFormater[i *4+3]stringFromDate:date5]);

    }

    /*

    输出:

    ----------中国日期格式----------

    Short格式日期:90/1/16上午8:00

    Medium格式日期:1990年1月16日上午8:00:00

    Long格式日期:1990年1月16日GMT+8上午8:00:00

    Full格式日期:1990年1月16日星期二中国标准时间上午8:00:00

    ----------美国日期格式----------

    Short格式日期:1/16/90, 8:00 AM

    Medium格式日期:Jan 16, 1990, 8:00:00 AM

    Long格式日期:January 16, 1990 at 8:00:00 AM GMT+8

    Full格式日期:Tuesday, January 16, 1990 at 8:00:00 AM China Standard Time

    */

    //自定义的格式模板

    NSDateFormatter*dateFormatter2 = [[NSDateFormatteralloc]init];

    [dateFormatter2setDateFormat:@"公元yyyy年MM月DD日HH时mm分"];

    [dateFormatter2stringFromDate:date5];//输出:公元1990年01月16日08时00分

    [dateFormatter2setDateFormat:@"2015-12-17"];

    [dateFormatter2stringFromDate:date5];//输出:2015-12-17,返回NSString

    [dateFormatter2setDateFormat:@"yyyy-MM-dd"];

    [dateFormatter2stringFromDate:date5];//输出:1990-01-16,返回NSString

    [dateFormatter2dateFromString:@"2015-12-17"];//将字符串转换为NSDate对象,输出:2015-12-16 16:00:00 +0000

    /*

    ----------日历(NSCalendar)与日期组件(NSDateComponents)----------前面介绍了NSDate的功能和用法,以及NSDate与NSString之间的相互转换,假设有如下场景:程序提

    供了3哥输入框,用于分别输入年、月、日的数值,接下来需要将年、月、日数值转换为NSDate;另一个场

    景:得到一个NSDate对象后,程序需要获取该NSDate中包含的年份、月份、第几日。这些都需要将NSDate的各个字段数值分开提取。

    为了能分开处理NSDate对象所包含的各个字段的数据,Foundation框架提供了NSCalendar对象。

    */

    //获取代表公历的NSCalendar

    NSCalendar*calendar = [NSCalendarcalendarWithIdentifier:NSCalendarIdentifierGregorian];NSDate*date6 = [NSDatedate];

    //定义一个时间字段的旗标,指定会获取指定年、月、日、时、分、秒的信息

    unsignedunitFlags =NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitWeekday;

    NSDateComponents*comp = [calendarcomponents:unitFlagsfromDate:date6];//获取不同时间

    字段信息

    //获取不同时间字段的数值

    NSLog(@"现在是%ld年%ld月%ld日%ld时%ld分%ld秒星期%ld", comp.year, comp.month, comp.day,

    comp.hour, comp.minute, comp.second, comp.weekday);//现在是2015年12月17日18时1分10秒星期5 (结果相差一天,要问为什么的话我也不知道)

    //再次创建一个NSDateComponents对象

    NSDateComponents*comp2 = [[NSDateComponentsalloc]init];

    comp2.year=2015;//年comp2.month=12;//月comp2.day=18;//日comp2.hour=9;//时comp.minute=30;//分

    [calendardateFromComponents:comp2];

    //输出:2015-12-18 01:00:00 +0000

    /*

    ----------定时器(NSTimer)----------

    如果程序需要让某个方法重复执行,则可以借助Object-C的定时器来完成。

    timeInterval指定每个多少秒执行一次任务,target执行任务的对象,

    selector执行的SEL,

    userInfo指定你需要附加的参数,

    repeats是否需要重复执行.销毁对象时调用定时器的invalidate方法即可

    */

    _timer= [NSTimerscheduledTimerWithTimeInterval:3target:selfselector:@selector(timerAction:)userInfo:@(_count)repeats:YES];

    }

    - (void)timerAction:(NSTimer*)timer {

    _count++;

    NSLog(@"附加的参数:_count = %ld",_count);行一次自增1)

    //输出:附加的参数:_count = 0 (0这个值每执

    NSLog(@"附加的参数:timer.userInfo = %@", timer.userInfo);timer.userInfo = 0 (0这个值每次执行都是0)

    if(_count>23) {

    [timerinvalidate];//停止定时器

    }

    }

    @end

    //输出:附加的参数:

  • 相关阅读:
    使用javap分析Java的字符串操作
    使用javap深入理解Java整型常量和整型变量的区别
    分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型
    Java动态代理之InvocationHandler最简单的入门教程
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/5230081.html
Copyright © 2011-2022 走看看