zoukankan      html  css  js  c++  java
  • Foundation框架—时间输出格式NSDateFormatter

    在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。下面来介绍NSDateFormatter的常用属性和API;

     1.常用属性

    @property (null_resettable, copy) NSString *dateFormat;//设置输出时间内容:

    /*quarter--->季度
         公元前/后:AD  
         年份:2017=2017=17 
         季度:2=Q2=2nd quarter
         月份:4=Apr=April 
         今天是今年第几周:17 
         今天是本月第几周:5 
         今天是今天第几天:114 
         今天是本月第几天:24 
         今天是星期几:Monday
         星期:2=Mon=Monday
         上午/下午:AM 
         小时:10=10 
         分钟:30 
         秒:48 
         毫秒:918  
         这一天已过多少毫秒:37848918 
         时区名称:China Standard Time=China Standard Time 时区编号:+0800
         */
        /*
         G: 公元时代,例如AD公元
         yy: 年的后2位
         yyyy: 完整年
         MM: 月,显示为1-12
         MMM: 月,显示为英文月份简写,如 Jan
         MMMM: 月,显示为英文月份全称,如 Janualy
         dd: 日,2位数表示,如02
         d: 日,1-2位显示,如 2
         EEE: 简写星期几,如Sun
         EEEE: 全写星期几,如Sunday
         aa: 上下午,AM/PM
         H: 时,24小时制,0-23
         K:时,12小时制,0-11
         m: 分,1-2位  
         mm: 分,2位  
         s: 秒,1-2位  
         ss: 秒,2位  
         S: 毫秒  
         Z:GMT
         */

    例子:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
        [dateFormatter setDateFormat:@"
                                     '公元前/后:'G
                                     '年份:'u'='yyyy'='yy
                                     '季度:'q'='qqq'='qqqq
                                     '月份:'M'='MMM'='MMMM 
                                     '今天是今年第几周:'w 
                                     '今天是本月第几周:'W 
                                     '今天是今年第几天:'D 
                                     '今天是本月第几天:'d 
                                     '今天是星期几:'EEEE 
                                     '星期:'c'='ccc'='cccc 
                                     '上午/下午:'a 
                                     '小时:'h'='H
                                     '分钟:'m
                                     '秒:'s 
                                     '毫秒:'SSS
                                     '这一天已过多少毫秒:'A 
                                     '时区名称:'zzzz'='vvvv 
                                     '时区编号:'Z "];
        
        NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);

        //"yyyy年MM月dd日 HH时mm分ss秒 +0800";

        //按照什么样的格式来格式化时间

        //formatter.dateFormat = @"yyyy年MM月dd日 HH时mm分ss秒 Z";

        //formatter.dateFormat = @"yyyy/MM/dd HH/mm/ss Z";

        //formatter.dateFormat = @"MM-dd-yyyy HH-mm-ss";

     

    @property NSDateFormatterStyle dateStyle;

    @property NSDateFormatterStyle timeStyle;

    //设置日期对象展示方式,关于样式:

    typedef NS_ENUM(NSUInteger, NSDateFormatterStyle) {    // date and time format styles
    
        NSDateFormatterNoStyle = kCFDateFormatterNoStyle,
    
        NSDateFormatterShortStyle = kCFDateFormatterShortStyle,
    
        NSDateFormatterMediumStyle = kCFDateFormatterMediumStyle,
    
        NSDateFormatterLongStyle = kCFDateFormatterLongStyle,
    
        NSDateFormatterFullStyle = kCFDateFormatterFullStyle
    
    };
    
     /*
    
           NSDateFormatterStyle几种取值样式
    
           NSDateFormatterNoStyle
    
           例如: (其实就是空白的,不显示) 
    
           NSDateFormatterShortStyle
    
           例如:下午7:00 | 15/5/19
    
           NSDateFormatterMediumStyle
    
           例如:下午7:00:00 | 2013年5月19日
    
           NSDateFormatterLongStyle
    
           例如:GMT +8下午7:00:00 | 2013年5月19日 
    
           NSDateFormatterFullStyle
    
           例如:中国标准时间下午7:00:00 | 2013年5月19日 星期日
    
         */

     

    @property (null_resettable, copy) NSLocale *locale;//设置本地的属性,可通过设置本地对象来决定打印出来的语言,比如设置本地标示为zh_CN,那么会用中文打印结果;

     //NSLocale
        NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:118800];
        //大陆--简体中文
        dateFormatter2.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//简体中文
        NSLog(@"%@", [dateFormatter2 stringFromDate:date]);
        // US English Locale (en_US)
        dateFormatter2.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
        NSLog(@"%@", [dateFormatter2 stringFromDate:date]); // Jan 2, 2001
        // French Locale (fr_FR)
        dateFormatter2.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];
        NSLog(@"%@", [dateFormatter2 stringFromDate:date]); // 2 janv. 2001
        // Japanese Locale (ja_JP)
        dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"];
        NSLog(@"%@", [dateFormatter2 stringFromDate:date]); // 2001/01/02

       

     

    @property (null_resettable, copy) NSTimeZone *timeZone;//时区的设置,我们所处的中国是在东八区。通过系统API调用获取到的时间对象默认是GMT时间,也即是0时区时间,虽然在绝对时间上哪个时区都一样,但是在具体地方的相对时间展示是不同的。因此要具体展示时可以调整相应的时区。关于NSTimeZone的知识介绍,可以参考我的另一篇博文

    NSDateFormatter中timezone的使用:

    // NSDateFormatter 设置时区
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 设置时区,设置为 GMT
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    @property (null_resettable, copy) NSCalendar *calendar;;//日历对象,关于NSCalendar的知识介绍,可以参考我的另一篇博文

      2.常用方法

    stringFromDate

    dateFromString

     好了,关于NSDateFormatter的常用知识点了解的差不多了,现在让我们来一段实战代码:

     //        获取时间
            NSDate *date = [NSDate date];
            NSLog(@"国际标准时间:%@",date);
            //        获取系统当前时区
            NSTimeZone *zone = [NSTimeZone systemTimeZone];//中国位于东八区、与国际标准时间相差8小时
            //      获取当前时区与格林尼治时间的间隔
            NSTimeInterval ti  = [zone secondsFromGMTForDate:date];
            //获取本地时间
            NSDate *localDate = [NSDate dateWithTimeIntervalSinceNow:ti];
            NSLog(@"当前时区的时间:%@",localDate);
            //
            /*日期格式转换*/
            NSDateFormatter *dfmt = [[NSDateFormatter alloc]init];
            //设置日期格式 注意大小写的区分
            dfmt.dateFormat = @"yyyy年MM月dd日 HH时:mm分:ss秒";
            //按照日期格式 转化为字符串
            //GMT时间转换为日期字符串
            NSLog(@"日期转字符串2:%@",[dfmt stringFromDate:date]);
            //本地时间对象转化内时间字符串
            NSString *localDateString = [dfmt stringFromDate:localDate];//调用这个API时,默认将时间对象认为时格林尼日志时间(内部又重新加了格林尼治时间与当前时区的时差8小时,所以要获取当前时间的字符串对象时,不需要再额外转换成当前时区的时间对象)
            NSLog(@"日期转字符串:%@",localDateString);
            //按照日期格式 将时间字符串转化为时间对象
            NSDate *localDate2 = [dfmt dateFromString:localDateString];
            NSLog(@"字符串转日期:%@",localDate2);
  • 相关阅读:
    遇到的两个问题
    项目分析(map复习)
    while小问题
    二级指针
    映射文件实现进程通信
    struct {0}初始化
    用boost共享内存实现进程通信的例子
    mongo二维数组操作
    项目分析(channelid是如果产生的)
    string为什么可以写入共享内存
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/9716643.html
Copyright © 2011-2022 走看看