在一个快速的操场上,我一直在使用
NSDate.date()
Run Code Online (Sandbox Code Playgroud)
但是,这总是会附加时间元素.对于我的应用程序,我需要忽略时间元素.这在Swift中可能吗?怎么做到呢?即使我可以将时间元素设置为每个日期也同时工作.
此外,我正在尝试比较两个日期,目前我正在使用以下代码:
var earlierDate:NSDate = firstDate.earlierDate(secondDate)
Run Code Online (Sandbox Code Playgroud)
这是唯一的方法,还是可以忽略时间元素的方式?例如,如果他们是同一天,但不同的时间,我不想要结果.
我已经看到了这个Swift Equatable Protocol问题的答案,该问题提到了如何==在全局范围内声明该方法.
如果我不采用Equatable,我仍然可以声明==测试我的两种类型之间的相等性.
// extension Foo: Equatable {}
func ==(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
struct Foo {
let bar:Int
}
Run Code Online (Sandbox Code Playgroud)
它的实现需要在全球范围内声明的事实使得它似乎是偶然的,并且与协议不同,即使Equatable被采用.
Equatable协议如何只是语法糖只是让(我们和)编译器安全地知道我们的类型实现了协议所需的方法?
为什么运算符实现必须全局声明,即使对于协议也是如此?这是由于调度操作员的某种不同方式吗?
我一直在设置UIDatePicker 字体和颜色时遇到麻烦.我的应用程序中的其他所有内容都非常简单,除此之外.有人知道怎么做这个吗?我正在使用Swift for iOS8.

知道某个日期是在同一周(或年份或月份)中的最佳方式是什么,最好是使用扩展,并且只使用Swift?
作为一个例子,在Objective-C中我有
- (BOOL)isSameWeekAs:(NSDate *)date {
NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:self];
NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date];
return ([today weekOfYear] == [otherDay weekOfYear] &&
[today year] == [otherDay year] &&
[today era] == [otherDay era]);
}
Run Code Online (Sandbox Code Playgroud)
请不要提出解决桥接Date至NSDate
我有一个日期,我需要拆分一些组件.例如
let components = NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitHour
let date = calendar.components(components, fromDate: aDate, toDate: NSDate(), options: nil)
var dateToPrint = "\(date.day) days \(date.hour) hours"
Run Code Online (Sandbox Code Playgroud)
dateToPrint将是从aDate到现在的天数和小时数.但如果我想要几周而不是几天
let components = NSCalendarUnit.CalendarUnitWeek | NSCalendarUnit.CalendarUnitHour
let date = calendar.components(components, fromDate: aDate, toDate: NSDate(), options: nil)
var dateToPrint = "\(date.week) weeks \(date.hour) hours"
Run Code Online (Sandbox Code Playgroud)
date.week不存在.那我怎么解决这个问题呢?
嗨,我想检查当前时间是否在一个时间范围内,比如8:00 - 16:30.我的代码显示我可以将当前时间作为字符串获取,但我不确定如何使用此值来检查它是否在上面指定的时间范围内.任何帮助将不胜感激!
var todaysDate:NSDate = NSDate()
var dateFormatter:NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
var dateInFormat:String = dateFormatter.stringFromDate(todaysDate)
println(dateInFormat) // 23:54
Run Code Online (Sandbox Code Playgroud) 我有两个约会,我想比较一下.我该如何比较日期?我必须约会对象.说modificateionDate老了updatedDate.
那么比较日期的最佳做法是什么?
我已经从我的服务器返回了一个 NSDate 值,我需要知道这个 NSDate 是多久以前的。我需要编写一个条件来查看日期是否超过 6 个月(在 Swift 中,但我可以转换为 Objective-C)。
这是在控制台中打印时返回的 NSDate:
(2015-09-07 01:22:01 +0000)
Run Code Online (Sandbox Code Playgroud)
我如何检查上述日期是否早于 6 个月?
逻辑将是这样的:
//dateValue is the NSDate returned
var dateValue = log.createdAt
if (dateValue > 6 months){
}
else{
}
Run Code Online (Sandbox Code Playgroud) 如何将数据库中的值与当前日期进行比较?执行某些操作时,日期会保存在数据库中,我需要将该日期与当前日期进行比较并执行一些操作。我怎样才能做到这一点 ?
日期以这种格式保存在我的日期基础上:
var tasksin2 : Task?
dateFormatter.dateFormat = "dd/MM/yyyy hh:mm"
let mydate="\(dateFormatter.string(from: datePicker.date))"
tasksin2?.time=mydate
(UIApplication.shared.delegate as! AppDelegate).saveContext()
Run Code Online (Sandbox Code Playgroud) 我想检查两个日期是否相等,其中相等意味着它们与分钟的值相同.我不想比较秒值.
例如:
// should be equal
11/12/17 11:19:29
11/12/17 11:19:03
// not equal
11/12/17 11:19:59
11/12/17 11:20:00
Run Code Online (Sandbox Code Playgroud)
我正在考虑这样做的一种方法是获取时间组件并通过每个组件.但我想知道是否有更快或更清洁的方式.
ios ×8
swift ×8
nsdate ×4
time ×3
cocoa-touch ×2
date ×2
calendar ×1
datetime ×1
equatable ×1
foundation ×1
macos ×1
nscalendar ×1
swift3 ×1
uidatepicker ×1