我想从日期选择器获取最小和最大日期,但最小日期应为当前日期的" - 18",最大日期应为当前日期的" - 100".
假设当前年份是2018年,那么我想要最小日期2000和最大日期1918.
到目前为止我所做的是:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger year = [components year];
int mindt = year - 18;
int maxdt = year -100;
// NSDate * MinDate = [components year] - 18;
// NSDate * MaxDate = [components year] - 100;
// self.datePicker.minimumDate = MinDate;
// self.datePicker.maximumDate = MaxDate;
Run Code Online (Sandbox Code Playgroud)
但我不能得到这个整数到我的日期格式..
它也知道,创造NSDateFormatters是" 昂贵 "
甚至Apple的数据格式指南(2014-02更新)都声明:
创建日期格式化程序并不是一个便宜的操作.如果您可能经常使用格式化程序,则缓存单个实例通常比创建和处理多个实例更有效.一种方法是使用静态变量.
但是这个文档看起来并不是最新的swift,我在最新的NSDateFormatter类参考中也找不到关于缓存格式化程序的任何内容,因此我只能假设它对于swift和Objective-c一样昂贵.
很多消息来源建议使用它来缓存类中的格式化程序,例如控制器或视图.
我想知道将单例类添加到项目中以存储日期选择器是否方便甚至"更便宜",因此您可以放心,它永远不必再次创建它.这可以在应用程序的任何地方使用.您还可以创建包含多个日期选择器的多个共享实例.例如,一个用于显示日期的日期选择器和一个用于时间表示法的日期选择器:
class DateformatterManager {
var formatter = NSDateFormatter()
class var dateFormatManager : DateformatterManager {
struct Static {
static let instance : DateformatterManager = DateformatterManager()
}
// date shown as date in some tableviews
Static.instance.formatter.dateFormat = "yyyy-MM-dd"
return Static.instance
}
class var timeFormatManager : DateformatterManager {
struct Static {
static let instance : DateformatterManager = DateformatterManager()
}
// date shown as time in some tableviews
Static.instance.formatter.dateFormat …Run Code Online (Sandbox Code Playgroud) 前段时间我写了一个名为Day-O的简单日历菜单栏小部件.日历使用嵌套在NSMenuItem中的NSView内部的NSDatePicker库存添加到NSStatusItem中的NSMenu中.该应用程序有一个activationPolicy .accessory(最初通过plist的"Application is agent"bool设置).在某些时候(可能是El Capitan更新?)日历停止响应输入.当应用程序首次启动时,您可以单击状态栏项以展开菜单并与日历交互,并按预期响应用户输入.但是一旦应用程序失去了初始焦点,日历就会停止响应输入.
我认为我已经跟踪了问题,直到最初辞职活动后应用程序未激活.问题是,如果我在单击菜单栏项目时尝试手动激活应用程序(使用NSApp.activate(ignoringOtherApps:true)),则菜单(您刚刚打开)将被解除.
我也试过告诉窗口让NSDatePicker成为第一个响应者,但这似乎也没有任何效果.
当状态栏应用程序不是活动应用程序时,如何在菜单项中获取NSDatePicker以接受用户输入?
编辑:最简单的代码来说明问题(在新的macOS Cocoa应用程序中将其添加到AppDelegate):
let statusItem = NSStatusBar.system().statusItem(withLength:NSVariableStatusItemLength)
func applicationDidFinishLaunching(_ aNotification: Notification) {
NSApp.setActivationPolicy(.accessory)
statusItem.button?.title = "Calendar"
let menu = NSMenu()
let item = NSMenuItem()
let picker = NSDatePicker(frame: NSRect(x: 0, y: 0, width: 140, height: 148))
picker.datePickerStyle = .clockAndCalendarDatePickerStyle
item.view = picker
menu.addItem(item)
statusItem.menu = menu
}
Run Code Online (Sandbox Code Playgroud)
启动应用程序,单击菜单项,然后单击日历.然后单击另一个应用程序,然后再次单击菜单项.日历不再响应点击次数.
当它被更改时,我如何收到NSDatePicker值的通知?
我只是在表单中添加一个 NSDatePicker,设置图形样式,然后设置操作,如下所示:
[datePicker setAction:@selector(datePickSelected:)];
Run Code Online (Sandbox Code Playgroud)
在该方法中,它只是打印出选定的日期。
-(void)datePickSelected:(id)sender
{
NSLog(@"%@",[datePicker dateValue]);
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但当您单击此日期选择器中的日期时会运行两次。为什么是这样?
2011-05-25 15:17:09.382 xxx[6609:a0f] 2011-05-13 15:17:04 +0800
2011-05-25 15:17:09.677 xxx[6609:a0f] 2011-05-13 15:17:04 +0800
Run Code Online (Sandbox Code Playgroud) 我的nib文件中有一个NSDatePicker.在代码中,我将其时区设置为GMT日历的时区:
[datePicker setTimeZone:[calendar timeZone]];
Run Code Online (Sandbox Code Playgroud)
我只关心以编程方式填充的datepicker上的时间(小时,分钟):
NSDate *anyDate = [NSDate date];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:anyDate];
[components setHour:hours];
[components setMinute:minutes];
NSDate *newDate = [calendar dateFromComponents:components];
[datePicker setDateValue:newDate];
Run Code Online (Sandbox Code Playgroud)
这正确地具有将日期选择器时间设置为我想要的时间的期望效果.因此,如果小时数为8,分钟数为30,则日期选择器显示为8:30.但是,如果我在日期选择器的小时字段中输入一个8,它显示为3.奇怪的是某个地方正在进行时区,但我不知道在哪里......
我正在制作一个闹钟,它会告诉你你有多少小时和几分钟的睡眠时间.我设置了一个UIDatePicker用户选择他们想要醒来的时间.它还告诉了第二个确切的时间.我坚持的部分是他们将要睡多少小时.我试过基本上从中减去确切的时间UIDatePicker.如果它们都在AM中,这就有效.例如,如果用户想要在上午10:30醒来并且是上午9:30,那么您所要做的就是从9:30减去10:30以获得1小时.我很快意识到,如果它们是不同的时间,例如AM或PM,这将不起作用.
我如何从UIDatePicker获得时间
func handler(sender: UIDatePicker) {
var timeFormatter = NSDateFormatter()
timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
var strDate = timeFormatter.stringFromDate(theDatePicker.date)
}
theDatePicker.addTarget(self, action: Selector("handler:"), forControlEvents: UIControlEvents.ValueChanged)
Run Code Online (Sandbox Code Playgroud)
我怎么得到了确切的时间
var date = NSDate()
var outputFormat = NSDateFormatter()
outputFormat.locale = NSLocale(localeIdentifier:"en_US")
outputFormat.dateFormat = "HH:mm:ss"
timeLabel.text = (outputFormat.stringFromDate(date))
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("getTime"), userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)
我的问题:
如何UIDatePicker从准确的时间中减去用户获得的睡眠时间?

场景:
用户正在NSDatePicker以文本形式输入一个没有步进器的日期(在OS X上),当他们点击键盘返回时,我想要一条消息发送到控制器.
在一个NSTextField,我只是在Interface Builder中挂起动作,或者从代码中设置它,当用户点击进入时,动作消息被发送到目标.
日期选择器允许设置操作消息和目标,但我无法触发操作.当我在日期选择器中按Enter键时,不会调用操作消息.
我做错了什么,还是有一个我必须使用的解决方法?如果需要的话,我不会对任何涉及的类的子类化产生不利影响.
我想要NSDate离开UIDatePicker,但它不断给我一个约会时间20秒.如何NSDate在swift中手动将秒设置为零?
嗨是否有可能有一个NSDatePicker表示一个零对象?像 - / - / - 或任何其他方式.
谢谢,拉杜
嗨,所以我做了一些用户在NSDatePicker中输入TIME的东西,这样我就可以获取值并将其存储到字符串中供以后使用.我已经将日期选择器与插座连接起来,我试图获得输出的价值而没有运气!请帮忙!
NSDatePicker设置为仅显示上午12:00的时间
谢谢
在我的应用程序中,我在文本字段中使用日期选择器和显示日期,
日期选择器以这种格式给我一个日期"2012年3月1日"
我想以"dd/MM/yyyy"格式表示该日期.
我怎样才能做到这一点?
nsdatepicker ×12
cocoa ×6
objective-c ×6
nsdate ×5
swift ×5
ios ×4
macos ×2
caching ×1
iphone ×1
nsstatusitem ×1
nstimezone ×1
xcode ×1