zoukankan      html  css  js  c++  java
  • oc之mac中NSDatePicker(日期选择)

    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

    };

    pastedGraphic.png

    NSDatePickerElementFlags

    typedef NS_OPTIONS(NSUInteger, NSDatePickerElementFlags) {

        /* Time Elements */

        NSHourMinuteDatePickerElementFlag       = 0x000c,

        NSHourMinuteSecondDatePickerElementFlag = 0x000e,

        NSTimeZoneDatePickerElementFlag     = 0x0010,

        /* Date Elements */

        NSYearMonthDatePickerElementFlag        = 0x00c0,

        NSYearMonthDayDatePickerElementFlag     = 0x00e0,

        NSEraDatePickerElementFlag          = 0x0100,

    };

    效果图

    pastedGraphic_1.png

    参考资料

    悲观患者的《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

  • 相关阅读:
    使用ffmpeg的C语言的SDK实现对桌面声音的采集
    使用ffmpeg的C语言的SDK实现对桌面图像的采集
    小米手机音质——改善底噪
    基于LEGO使用PID算法进行单光巡线机器人设计的心得体会
    FPGA最小系统板——MOJO V3 Verilog入门教程之创建你的第一个工程(1)
    FPGA最小系统板——MOJO V3 使用感受
    18.07.05 FPGA入门笔记(1)——“二选一多路器”的开发以及入门诸多注意事项
    unity一些操作汇总
    unity中添加音量控制的一些步骤
    docker在windows下和linux下网络底层的一些区别
  • 原文地址:https://www.cnblogs.com/sundaymac/p/10338333.html
Copyright © 2011-2022 走看看