在NSDate没有其他信息的情况下,如何获得对象的年/月/日?我意识到我可以用类似的东西做到这一点:
NSCalendar *cal = [[NSCalendar alloc] init];
NSDateComponents *components = [cal components:0 fromDate:date];
int year = [components year];
int month = [components month];
int day = [components day];
Run Code Online (Sandbox Code Playgroud)
但这对于像NSDate年/月/日这样简单的事情来说似乎有很多麻烦.还有其他解决方案吗?
如何检查一个NSDate属于今天?
我曾经使用前10个字符来检查它[aDate description].[[aDate description] substringToIndex:10]像"YYYY-MM-DD"这样返回字符串我将字符串与返回的字符串进行了比较[[[NSDate date] description] substringToIndex:10].
有更快速和/或更好的方式来检查?
谢谢.
看起来像一个简单的事情,但我似乎无法找到一种方法来做到这一点.
看到几种不同的方法会很棒.
我创建了一个方法,该方法应该以"YYYY-MM-DD"形式接收一个字符串并吐出一个int,表示相对于它所在周的日期位置(无论它是否在几个月之间重叠).所以例如星期日= 1星期一= 2,依此类推.
这是我的代码:
func getDayOfWeek(today:String)->Int{
var formatter:NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "YYYY-MM-DD"
var todayDate:NSDate = formatter.dateFromString(today)!
var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: todayDate)
var weekDay = myComponents.weekdayOrdinal
return weekDay
}
Run Code Online (Sandbox Code Playgroud)
我知道这NSCalendarUnit.WeekdayOrdinalCalendar是错的,但我尝试过我认为最合乎逻辑的组合.并且还混淆了myComponents.weekdayOrdinal例如使用mycomponents.day或.weekday.
以下是我可以使用的选项:
static var EraCalendarUnit: NSCalendarUnit { get }
static var YearCalendarUnit: NSCalendarUnit { get }
static var MonthCalendarUnit: NSCalendarUnit { get }
static var DayCalendarUnit: NSCalendarUnit { get }
static var HourCalendarUnit: NSCalendarUnit { get } …Run Code Online (Sandbox Code Playgroud) 如何使用NSDate或Cocoa touch中的类似内容获取当月的当前天数?
我试图迅速获得本月的第一天和最后一天.
到目前为止,我有以下内容:
let dateFormatter = NSDateFormatter()
let date = NSDate()
dateFormatter.dateFormat = "yyyy-MM-dd"
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: date)
let month = components.month
let year = components.year
let startOfMonth = ("\(year)-\(month)-01")
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获得最后的约会.有缺点的内置方法吗?显然它必须考虑到闰年等.
我有一个NSDate对象,我想将它设置为任意时间(比如半夜),这样我可以使用timeIntervalSince1970的功能一致,而不用担心时间来检索数据时创建的对象.
我尝试使用NSCalendar一些Objective-C方法来修改它的组件,如下所示:
let date: NSDate = NSDate()
let cal: NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
let components: NSDateComponents = cal.components(NSCalendarUnit./* a unit of time */CalendarUnit, fromDate: date)
let newDate: NSDate = cal.dateFromComponents(components)
Run Code Online (Sandbox Code Playgroud)
上述方法的问题在于您只能设置一个时间单位(/* a unit of time */),因此您只能使用下列其中一个准确度:
有没有办法同时设置小时,分钟和秒并保留日期(日/月/年)?
我正在尝试弄清楚如何确定给定时间戳今天是否发生,或+1/-1天.基本上,我想做这样的事情(Pseudocode)
IF days_from_today(timestamp) == -1 RETURN 'Yesterday'
ELSE IF days_from_today(timestamp) == 0 RETURN 'Today'
ELSE IF days_from_today(timestamp) == 1 RETURN 'Tomorrow'
ELSE IF days_from_today(timestamp) < 1 RETURN days_from_today(timestamp) + ' days ago'
ELSE RETURN 'In ' + days_from_today(timestamp) + ' ago'
Run Code Online (Sandbox Code Playgroud)
至关重要的是,它需要在Swift中,我正在努力使用NSDate/NSCalendar对象.我开始研究这样的时差:
let calendar = NSCalendar.currentCalendar()
let date = NSDate(timeIntervalSince1970: Double(timestamp))
let timeDifference = calendar.components([.Second,.Minute,.Day,.Hour],
fromDate: date, toDate: NSDate(), options: NSCalendarOptions())
Run Code Online (Sandbox Code Playgroud)
然而,以这种方式进行比较并不容易,因为.Day根据一天中的时间和时间戳而不同.在PHP中,我只是使用mktime来创建一个基于一天开始的新日期(即mktime(0,0,0)),但我不确定在Swift中最简单的方法.
有没有人对如何处理这个问题有个好主意?也许NSDate或类似的东西的扩展最好?
我在Swift 2.3中这样做的方式是:
let currentDate = NSDate()
let currentCalendar = NSCalendar.currentCalendar()
var startDate : NSDate?
var endDate : NSDate?
// The following two lines set the `startDate` and `endDate` to the start of the day
currentCalendar.rangeOfUnit(.Day, startDate: &startDate, interval: nil, forDate: currentDate)
currentCalendar.rangeOfUnit(.Day, startDate: &endDate, interval: nil, forDate: self)
let intervalComps = currentCalendar.components([.Day], fromDate: startDate!, toDate: endDate!, options: [])
print(intervalComps.day)
Run Code Online (Sandbox Code Playgroud)
现在这已经全部改变了Swift 3.我必须使用NSCalendar和NSDate不断地输入as,或者找到Swift 3的方式.
在Swift 3中使用它的正确方法是什么?
有没有人知道是否有办法在NSCalendar上设置一周的第一天,或者是否有一个日历已经将星期一作为一周的第一天而不是星期日.我目前正在开发一款基于一周工作量的应用程序,它需要在星期一而不是星期天开始.我很可能会做一些工作来解决这个问题,但会有很多极端情况.我更喜欢平台为我做这件事.
提前致谢
这是我正在使用的一些代码.现在是星期六,所以我希望工作日是6而不是7,这意味着星期日将是7而不是0到0
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setFirstWeekday:0];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit;
NSDateComponents *todaysDate = [gregorian components:unitFlags fromDate:[NSDate date]];
int dayOfWeek = todaysDate.weekday;
Run Code Online (Sandbox Code Playgroud) nscalendar ×10
nsdate ×8
ios ×6
swift ×4
cocoa-touch ×3
cocoa ×2
datetime ×2
objective-c ×2
calendar ×1
iphone ×1
swift3 ×1
weekday ×1