2017年09月08日 17:44:04 lovechris00 阅读数:2830更多
所属专栏: macOS 开发
版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/77897368
使用 NSDatePicker 就可以调出日期选择,结果图如最下。
- 注意事项
- 创建
- 枚举
- NSDatePickerStyle
- NSDatePickerElementFlags
- 效果图
- 参考资料
注意事项
- 建议把这个 picker 作为全局变量,这样就不会每次点击按钮都添加。
- 使用setAction 监听选中的值;
- 不管给 picker 设置的 frame 是多大,picker 的显示大小是固定的。
- 调出的 picker 带有日期和钟表的时间,选择日期 和 拨动钟表盘的 时分秒 针 都会触发 updateDateResult 方法
创建
- (void)pickTime{
NSDatePicker *datePicker = [[NSDatePicker alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)];
[datePicker setDatePickerStyle:NSClockAndCalendarDatePickerStyle];
datePicker.wantsLayer = YES;
datePicker.layer.backgroundColor = [NSColor cyanColor].CGColor;
// 设置日期选择控件的类型为“时钟和日历”。其他类型有如,NSTextField文本框
[datePicker setDateValue: [NSDate date]];
// 初始化选中当前日期
[datePicker setAction:@selector(updateDateResult:)];
// 绑定每次选择日期触发的action
[self.view addSubview:datePicker];
}
- (void)updateDateResult:(NSDatePicker *)datePicker{
// 拿到当前选择的日期
NSDate *theDate = [datePicker dateValue];
NSLog(@"日期:%@",theDate);
if (theDate) {
// 把选择的日期格式化成想要的形式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *dateString = [formatter stringFromDate:theDate];
NSLog(@"日期:%@",dateString);
}
}
枚举
NSDatePickerStyle
typedef NS_ENUM(NSUInteger, NSDatePickerStyle) {
NSTextFieldAndStepperDatePickerStyle = 0,
NSClockAndCalendarDatePickerStyle = 1,
NSTextFieldDatePickerStyle = 2
};
NSDatePickerElementFlags
typedef NS_OPTIONS(NSUInteger, NSDatePickerElementFlags) {
/* Time Elements */
NSHourMinuteDatePickerElementFlag = 0x000c,
NSHourMinuteSecondDatePickerElementFlag = 0x000e,
NSTimeZoneDatePickerElementFlag = 0x0010,
/* Date Elements */
NSYearMonthDatePickerElementFlag = 0x00c0,
NSYearMonthDayDatePickerElementFlag = 0x00e0,
NSEraDatePickerElementFlag = 0x0100,
};
效果图
参考资料
悲观患者的《mac开发系列28:日期选择功能实现》http://www.jianshu.com/p/6886ed384cc4
一、以NSString形式获取当前时间
-(NSString*)getCurrentTimes{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
//现在时间,你可以输出来看下是什么格式
NSDate *datenow = [NSDate date];
//----------将nsdate按formatter格式转成nsstring
NSString *currentTimeString = [formatter stringFromDate:datenow];
NSLog(@"currentTimeString = %@",currentTimeString);
return currentTimeString;
}
二、分别单独获得年、月、日
NSDate *date =[NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy"];
NSInteger currentYear=[[formatter stringFromDate:date] integerValue];
[formatter setDateFormat:@"MM"];
NSInteger currentMonth=[[formatter stringFromDate:date]integerValue];
[formatter setDateFormat:@"dd"];
NSInteger currentDay=[[formatter stringFromDate:date] integerValue];
NSLog(@"currentDate = %@ ,year = %ld ,month=%ld, day=%ld",date,currentYear,currentMonth,currentDay);
三、获得时间间隔:
四、获取星期几:
这里我是封装了一个方法,代码如下:
-(void)setDate{
NSDate *date =[NSDate date];
//获取星期几
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [[NSDateComponents alloc] init];
NSInteger unitFlags = NSCalendarUnitWeekday ;
comps = [calendar components:unitFlags fromDate:date];
NSInteger week = [comps weekday];
NSLog(@"week == %zd",week);
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy"];
NSString *currentYear=[formatter stringFromDate:date];
[formatter setDateFormat:@"MM"];
NSString *currentMonth=[formatter stringFromDate:date];
self.monthAndYearLabel.text=[NSString stringWithFormat:@"%@/%@",currentMonth,currentYear];
[formatter setDateFormat:@"dd"];
NSString *currentDay=[formatter stringFromDate:date];
self.dayLabel.text = currentDay;
switch (week) {
case 1:
self.weekdayLabel.text = @"星期日";
break;
case 2:
self.weekdayLabel.text = @"星期一";
break;
case 3:
self.weekdayLabel.text = @"星期二";
break;
case 4:
self.weekdayLabel.text = @"星期三";
break;
case 5:
self.weekdayLabel.text = @"星期四";
break;
case 6:
self.weekdayLabel.text = @"星期五";
break;
case 7:
self.weekdayLabel.text = @"星期六";
break;
default:
self.weekdayLabel.text = @"";
break;
}
}
总结可知,不同时间形式的获取,主要靠NSDateFormatter这个类的对象的设置。例如,如果还想要获得“ 9:00AM”的形式,可以设置其格式为“hh:mmaaa”等。
原文:https://blog.csdn.net/lyxleft/article/details/79226774