在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 *)beginningOfDay:(NSDate *)date
{
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:date];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
return [cal dateFromComponents:components];
}
-(NSDate *)endOfDay:(NSDate *)date
{
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:date];
[components setHour:23];
[components setMinute:59];
[components setSecond:59];
return [cal dateFromComponents:components];
}
Run Code Online (Sandbox Code Playgroud)
当我打电话:[self endOfDay:[NSDate date]]; 我得到了本月的第一天......为什么?我使用这两种方法,因为我需要一个从第一个日期的第一秒开始的间隔(beginningOfDay:date1)到第二个日期的最后一秒(endOfDay:Date2)......
在朱利安日计算器上编写一些单元测试时,我发现1847年12月2日之前的日期被NSDate错误地初始化.他们似乎有75秒加入.我找不到任何指向那个日期的东西(这是在格里高利历年截止之后).这是一个错误还是我没有遇到历史性的日历调整?
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dateComps = [NSDateComponents new];
dateComps.year = 1847;
dateComps.month = 12;
dateComps.day = 1;
NSDate *d1 = [cal dateFromComponents:dateComps];
NSLog(@"d1 = %@", d1);
dateComps = [NSDateComponents new];
dateComps.year = 1847;
dateComps.month = 12;
dateComps.day = 2;
NSDate *d2 = [cal dateFromComponents:dateComps];
NSLog(@"d2 = %@", d2);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
d1 = 1847-12-01 00:01:15 +0000
d2 = 1847-12-02 00:00:00 +0000
我正在尝试使用此函数计算Swift中birthdayDate的年龄:
var calendar : NSCalendar = NSCalendar.currentCalendar()
var dateComponentNow : NSDateComponents = calendar.components(
NSCalendarUnit.CalendarUnitYear,
fromDate: birthday,
toDate: age,
options: 0)
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误 Extra argument toDate in call
在目标c中这是代码,但我不知道为什么会出现此错误:
NSDate* birthday = ...;
NSDate* now = [NSDate date];
NSDateComponents* ageComponents = [[NSCalendar currentCalendar]
components:NSYearCalendarUnit
fromDate:birthday
toDate:now
options:0];
NSInteger age = [ageComponents year];
Run Code Online (Sandbox Code Playgroud)
有没有比这更好的形式?
我想将服务器UTC时间转换为本地时间,反之亦然.这是我的代码..
var isTimeFromServer = true
var time:String!
var period:String!
let timeString = "6:59 AM" //Current UTC time
if isTimeFromServer {
let index = timeString.index(timeString.startIndex, offsetBy: 5)
let twelve = timeString.substring(to: index)
var dateString:String!
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "H:mm"
let date12 = dateFormatter.date(from: twelve)!
dateFormatter.dateFormat = "h:mm a"
let date22 = dateFormatter.string(from: date12)
//print(date22)
dateString = date22
//print("dateString=\(dateString)")
time = dateString.components(separatedBy: " ")[0]
period = dateString.components(separatedBy: " ")[1]
}
else {
time = timeString.components(separatedBy: " ")[0]
period = timeString.components(separatedBy: …Run Code Online (Sandbox Code Playgroud) 如何设置现有NSDate的时间?
那就是我有一个约会(比如说当前日期/时间),但是想把它设置为特定的时间(例如11.23am).在目标C中最快的方法是什么?
我在看NSCalendar,看的方法,如dateByAddingComponents:toDate:options:,和dateFromComponents:,但这些似乎并没有很切中要害了什么,我需要在这里.例如:
dateFromComponents: - 我必须解决所有这些工作的组件,这似乎有点矫枉过正dateByAddingComponents:toDate:options: - 我不想在我的情况下添加,而是"设置"时间.如何获得单个NSDate的NSDateComponents?我不想要两个日期之间的差异组件,只是NSDate的秒,分,小时,日,月和年?
我正在创建一个日期NSDateComponents().
let startDate = NSDateComponents()
startDate.year = 2015
startDate.month = 9
startDate.day = 1
let calendar = NSCalendar.currentCalendar()
let startDateNSDate = calendar.dateFromComponents(startDate)!
Run Code Online (Sandbox Code Playgroud)
...现在我要打印自startDate今天以来的所有日期,NSDate().我已经尝试过玩NSCalendarUnit,但它只输出整个差异,而不是单个日期.
let unit: NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second]
let diff = NSCalendar.currentCalendar().components(unit, fromDate: startDateNSDate, toDate: NSDate(), options: [])
Run Code Online (Sandbox Code Playgroud)
如何在两个Date对象之间打印所有日期?
编辑2019
与此同时,课程的命名已经改变 - NSDate现在只是Date.NSDateComponents现在被称为DateComponents.NSCalendar.currentCalendar()现在只是Calendar.current.
我想要两个NSInteger一年,一个月回去一个月.例如现在是2011-01我怎么能得到2010-12.添加是一回事,但我想减去.
NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
NSInteger year = [dateComponents year];
NSInteger month = [dateComponents month];
[calendar release];
NSString * pdf_name = [NSString stringWithFormat:@"file_%d_%02d.pdf", year, month];
Run Code Online (Sandbox Code Playgroud)
迎接endo
编辑:我的解决方案
NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
NSInteger year = [dateComponents year];
NSInteger month = [dateComponents month];
BOOL substractOneMonth …Run Code Online (Sandbox Code Playgroud) NSDateComponent的小时组件是12h还是24h格式?我在文档中找不到任何相关内容......
nsdatecomponents ×10
nsdate ×9
objective-c ×6
nscalendar ×3
swift ×3
ios ×2
cocoa ×1
iphone ×1