NSDate、NSDateFormatter、NSDatePicker介绍

来源:互联网 发布:电脑深度清理软件 编辑:程序博客网 时间:2024/06/07 07:53

~~~~我的生活,我的点点滴滴!!




#pragma mark 
NSDate创建(只举例类方法,实例方法一样)


// 返回当前时间(GMT,0时区,格林尼治时间)
+ (id)date;


// 返回以当前时间为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;


// 返回以2001/01/01  GMT为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti;


// 返回以1970/01/01  GMT为基准,然后过了secs秒的时间
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;


//  根据时间间隔和指定的date,获得对应的时间
+ (instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;


// 返回很多年以后的未来的某一天
+ (id /* NSDate * */)distantFuture;


// 返回很多年以前的某一天
+ (id /* NSDate * */)distantPast;






#pragma mark  
NSDate取回时间间隔
// 以anotherDate为基准时间,返回实例保存的时间与anotherDate的时间间隔
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;


// 以当前时间(now)为基准时间,返回实例保存的时间与当前时间(now)的时间间隔
- (NSTimeInterval)timeIntervalSinceNow;


// 以 1970/01/01 GMT 为基准时间,返回实例保存的时间与 1970/01/01 GMT 的时间间隔
- (NSTimeInterval)timeIntervalSince1970;


// 以 2001/01/01 GMT 为基准时间,返回实例保存的时间与 2001/01/01 GMT 的时间间隔
- (NSTimeInterval)timeIntervalSinceReferenceDate;


// 以 2001/01/01 GMT 为基准时间,返回当前时间与 2001/01/01 GMT 的时间间隔
+ (NSTimeInterval)timeIntervalSinceReferenceDate;


#pragma mark  
NSDate日期比较
// 与anotherDate相比,返回比较早的那个日期
- (NSDate *)earlierDate:(NSDate *)anotherDate;


// 与anotherDate相比,返回比较晚的那个日期
- (NSDate *)laterDate:(NSDate *)anotherDate;


// 与anotherDate相比,相同返回YES
- (BOOL)isEqualToDate:(NSDate *)otherDate;


// 用于排序时调用:
    ~ 当实例保存的日期值与other相同时返回NSOrderedSame
    ~ 当实例保存的日期值晚于other返回NSOrderedDescending
    ~ 当实例保存的日期值早于other返回NSOrderedAscending
- (NSComparisonResult)compare:(NSDate *)other;


#pragma mark
@NSString和NSDate的相互转化(NSDateFormatter的格式串详解)


1、字符串转换为日期
// 实例化一个NSDateFormatter对象 
NSDateFormatter * dateFormat = [[NSDateFormatter alloc] init];


// 设定时间格式,要注意跟下面的dateString匹配,否则日起将无效 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date =[dateFormat dateFromString:@"2013-3-11 10:00:01"]; 




2、日期转为字符串
// 实例化一个NSDateFormatter对象 
NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
 //  设置Locale,星期几会以中文显示
dateFormat.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
// 设定时间格式(后面跟 a,默认为中文) 
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss a"];
// 礼拜几,上下午等显示为英文,把AM,PM换成上午,下午显示为中文
[dateFormat setAMSymbol:@"AM"];         
[dateFormat setPMSymbol:@"PM"];   
// 系统默认格式
[dateFormat setDateStyle:NSDateFormatterFullStyle];
[dateFormat setTimeStyle:NSDateFormatterFullStyle];
//求出当天的时间字符串,当更改时间格式时,时间字符串也能随之改变 
NSString *dateString = [dateFormat stringFromDate:[NSDate date]]; 




@NSDateFormatter的格式串对应表


a: AM/PM (上午/下午)


A: 0~86399999 (一天的第A微秒)


c/cc: 1~7 (一周的第一天, 周天为1)


ccc: Sun/Mon/Tue/Wed/Thu/Fri/Sat (星期几简写)


cccc: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday (星期几全拼)


d: 1~31 (月份的第几天, 带0)


D: 1~366 (年份的第几天,带0)


e: 1~7 (一周的第几天, 带0)


E~EEE: Sun/Mon/Tue/Wed/Thu/Fri/Sat (星期几简写)


EEEE: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday (星期几全拼)


F: 1~5 (每月的第几周, 一周的第一天为周一)


g: Julian Day Number (number of days since 4713 BC January 1) 未知


G~GGG: BC/AD (Era Designator Abbreviated) 未知


GGGG: Before Christ/Anno Domini 未知


h: 1~12 (0 padded Hour (12hr)) 带0的时, 12小时制


H: 0~23 (0 padded Hour (24hr))  带0的时, 24小时制


k: 1~24 (0 padded Hour (24hr) 带0的时, 24小时制


K: 0~11 (0 padded Hour (12hr)) 带0的时, 12小时制


L/LL: 1~12 (0 padded Month)  第几月(3)


LLL: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec 月份简写(3月)


LLLL: January/February/March/April/May/June/July/August/September/October/November/December 月份全称(三月)


m: 0~59 (0 padded Minute) 分钟


M/MM: 1~12 (0 padded Month) 第几月


MMM: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec


MMMM: January/February/March/April/May/June/July/August/September/October/November/December(同LLLL)


q/qq: 1~4 (0 padded Quarter) 第几季度


qqq: Q1/Q2/Q3/Q4 季度简写


qqqq: 1st quarter/2nd quarter/3rd quarter/4th quarter 季度全拼


Q/QQ: 1~4 (0 padded Quarter) 同小写


QQQ: Q1/Q2/Q3/Q4 同小写


QQQQ: 1st quarter/2nd quarter/3rd quarter/4th quarter 同小写


s: 0~59 (0 padded Second) 秒数


S: (rounded Sub-Second) 未知


u: (0 padded Year) 未知


v~vvv: (General GMT Timezone Abbreviation) 常规GMT时区的编写


vvvv: (General GMT Timezone Name) 常规GMT时区的名称


w: 1~53 (0 padded Week of Year, 1st day of week = Sunday, NB: 1st week of year starts from the last Sunday of last year) 一年的第几周, 一周的开始为周日,第一周从去年的最后一个周日起算


W: 1~5 (0 padded Week of Month, 1st day of week = Sunday) 一个月的第几周


y/yyyy: (Full Year) 完整的年份


yy/yyy: (2 Digits Year)  2个数字的年份


Y/YYYY: (Full Year, starting from the Sunday of the 1st week of year) 这个年份未知干嘛用的


YY/YYY: (2 Digits Year, starting from the Sunday of the 1st week of year) 这个年份未知干嘛用的


z~zzz: (Specific GMT Timezone Abbreviation) 指定GMT时区的编写


zzzz: (Specific GMT Timezone Name) Z: +0000 (RFC 822 Timezone) 指定
GMT时区的名称




UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期、时间和持续时长的输入。他固定高度为216没法改变,

他没有提供更改里面字体颜色或字体大小等操作的接口,虽然很不爽,但是还算好用。




UIDatePicker 依赖于 NSDate 类。
  
一、创建日期/时间选取器


UIDatePicker 使用起来比标准 UIPickerView 更简单。他会根据你指定的日期范围创建自己的数据源,使用它只需要创建一个对象:


UIDatePicker *datePicker = [ [ UIDatePicker alloc] initWithFrame:CGRectMake(0.0,0.0,0.0,0.0)];
  
默认情况下选取会显示目前的日期和时间,并提供几个表盘,分别显示可以选择的月份和日期、小时、分钟、以及上午、下午。

因此用户默认可以选择任何日期和时间的组合。


二、日期选取器模式


日期/时间选取器支持4种不同模式的选择方式,通过设置 datePickerMode 属性,可以定义选择模式:


datePicker.datePickerMode = UIDatePickerModeTime;  


支持的模式:


typedef enum {  
    UIDatePickerModeTime,            仅显示时间,不显示日期

    UIDatePickerModeDate,            仅显示日期,不显示时间

    UIDatePickerModeDateAndTime,     同时显示日期和时间

    UIDatePickerModeCountDownTimer   倒计时器 小时和分
} UIDatePickerMode;
  
三、时间间隔


你可以将分钟表盘设置为以不同的时间间隔来显示分钟,前提是该间隔要能够让60整除, 默认最小间隔是一分钟,如果要使用不同的间隔,

需要改变 minuteInterval属性:


datePicker.minuteInterval = 5;  


四、日期范围


你可以通过设置mininumDate 和 maxinumDate 属性,来指定使用的日期范围。如果用户试图滚动到超出这一范围的日期,表盘会回滚到最近

的有效日期,两个方法都需要NSDate对象作参数:


NSDate* minDate = [[NSDate alloc]initWithString:@"1900-01-01 00:00:00 +0800"];  
NSDate* maxDate = [[NSDate alloc]initWithString:@"2099-01-01 00:00:00 +0800"];  
      
datePicker.minimumDate = minDate;  
datePicker.maximumDate = maxDate;  


如果两个日期范围属性中任何一个未被设置,则默认行为将会允许用户选择过去或未来的任意日期。这在某些情况下很有用处,比如,当选择

生日时,可以是过去的任意日期,但终止于当前日期。如果你希望设置默认显示的日期,可以使用date属性:


datePicker.date = minDate;  


此外,你还可以用 setDate 方法。如果选择了使用动画,则表盘会滚动到你指定的日期:


[ datePicker setDate:maxDate animated:YES];
  
五、显示日期选择器


[ self.view addSubview:datePicker];  


需要注意的是,选取器的高度始终是216像素,要确定分配了足够的空间来容纳。


六、读取日期


NSDate* _date = datePicker.date;  


由于日期选择器是 UIControl的子类 (与UIPickerView不同),你还可以在UIControl类的通知结构中挂接一个委托:




[ datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged ]; 
 
只要用户选择了一个新日期,你的动作类就会被调用:


-(void)dateChanged:(id)sender{      UIDatepicker* control = (UIDatePicker*)sender;      NSDate* _date = control.date;      /*添加你自己响应代码*/  }  


但由于DatePicker没有提供任何可以改变其样式的接口,如果想做成其他模式或改变里面某元素的颜色,还得使用PickView自定义。


实例:倒计时器


将UIDatePicker的模式设置为Count Down Timer,即可让该控件作为倒计时器使用。当将UIDatePicker作为倒计时器使用时,程序还应该

启动一个定时器定期更新该UIDatePicker的剩余时间。由此可见,把UIDatePicker作为Count Down Timer模式使用时,该控件最重要的属

性就是countDownDuration,该属性代表该倒计时器的剩余时间,程序既可通过countDownDuration属性获取该控件的剩余时间,也可通过

修改该属性来改变该控件显示的剩余时间。


看下面的例子,界面上一个button,一个datepicker


NSTimer* timer;NSInteger leftSeconds;  // ①- (void)viewDidLoad{    [super viewDidLoad];    // 设置使用Count Down Timer模式    self.countDown.datePickerMode = UIDatePickerModeCountDownTimer;}- (IBAction)clicked:(id)sender {    // 获取该倒计时器的剩余时间    leftSeconds = self.countDown.countDownDuration;    // 禁用UIDatePicker控件和按钮    self.countDown.enabled = NO;    [sender setEnabled:NO];    // 初始化一个字符串    NSString *message =  [NSString stringWithFormat:        @"开始倒计时?您还剩下【%d】秒", leftSeconds];    // 创建一个UIAlertView(警告框)    UIAlertView *alert = [[UIAlertView alloc]                        initWithTitle:@"开始倒计时?"                        message:message                        delegate:nil                        cancelButtonTitle:@"确定"                        otherButtonTitles:nil];    // 显示UIAlertView控件    [alert show];    // 启用计时器,控制每隔60秒执行一次tickDown方法    timer = [NSTimer scheduledTimerWithTimeInterval:60        target:self selector:@selector(tickDown)        userInfo:nil repeats:YES];}- (void) tickDown{    leftSeconds -= 60;  // 将剩余时间减少60秒    self.countDown.countDownDuration = leftSeconds;  // 修改UIDatePicker的剩余时间    if(leftSeconds <= 0)  // 如果剩余时间小于或等于0    {        // 取消定时器        [timer invalidate];        // 启用UIDatePicker控件和按钮        self.countDown.enabled = YES;        self.startBn.enabled = YES;    }}




上述程序中,①号粗体字代码定义了一个leftSeconds变量,该变量用于保存倒计时器的剩余时间,当用户单击程序界面时,将会激发

clicked:方法,该方法将启动一个定时器控制每隔60秒执行一次tickDown方法,而tickDown方法每执行一次,程序就将倒计时器的剩余

时间减少60,并动态修改倒计时器的剩余时间,这样就可让UIDatePicker显示的剩余时间减少。



0 0