首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将.hour()和.minute()从Swift转换为目标C?

如何将.hour()和.minute()从Swift转换为目标C?
EN

Stack Overflow用户
提问于 2016-04-14 15:29:44
回答 2查看 187关注 0票数 0

如何将.minute()和.hour()转换为Objective?

代码语言:javascript
复制
func nearestHour () -> Int {
    let halfHour = NSDate.minuteInSeconds() * 30
    var interval = self.timeIntervalSinceReferenceDate
    if  self.seconds() < 30 {
        interval -= halfHour
    } else {
        interval += halfHour
    }
    let date = NSDate(timeIntervalSinceReferenceDate: interval)
    return date.hour()
}

我试过这个:

代码语言:javascript
复制
- (int) nearestHour {
NSInteger halfHour = [NSDate minuteInSeconds].intValue * 30;
NSTimeInterval interval = [self timeIntervalSinceReferenceDate];
if ([self seconds] < 30) {
    interval -= halfHour;
}
else {
    interval += halfHour;
}
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate: interval];
return [date hour];
}

在这些行中,我得到以下错误:

代码语言:javascript
复制
if ([self seconds] < 30) {

NSDate没有可见的@接口声明选择器秒。

代码语言:javascript
复制
return [date hour];

NSDate没有可见的@接口声明选择器小时。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-14 15:42:03

如前所述,NSDate没有您需要的接口。您需要将其分解为日历界面。然后,您可以设置小时/分钟/秒和这样的单独或得到他们,或任何你需要做的。

代码语言:javascript
复制
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self];

if ([components seconds] < 30) {

以你为例:

代码语言:javascript
复制
- (int) nearestHour {
    NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:self];
    NSInteger halfHour = [NSDate minuteInSeconds].intValue * 30;
    NSTimeInterval interval = [self timeIntervalSinceReferenceDate];
    if ([components minutes] < 30) {
        interval -= halfHour;
    }
    else {
        interval += halfHour;
    }
    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:    interval];
    return [date hour];
}

关于SO和google:How do I get the current hour using Cocoa?的许多例子

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html#//apple%5Fref/doc/uid/10000039

票数 0
EN

Stack Overflow用户

发布于 2016-04-14 16:24:20

苹果建议总是用NSCalendar来计算日期,因为例如,当夏时制改变时,通过加/减秒计算的一些日期可能不存在。

nextDateAfterDate根据指定的日期组件计算下一个日期,在本例中是下一个会议记录为零的日期。为了在过去得到最近的时间,你也可以向后搜索。

Swift

代码语言:javascript
复制
let now = NSDate()
let calendar = NSCalendar.currentCalendar()
let roundDown = calendar.component(.Minute, fromDate: now) < 30
let components = NSDateComponents()
components.minute = 0
let options : NSCalendarOptions = roundDown ? [.MatchNextTime, .SearchBackwards] : .MatchNextTime
let nearestDate = calendar.nextDateAfterDate(now, matchingComponents: components, options:  options)!
let nearestHour = calendar.component(.Hour, fromDate: nearestDate)

目标-C

代码语言:javascript
复制
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
BOOL roundDown = [calendar component:NSCalendarUnitMinute fromDate: now] < 30 ;
NSDateComponents *components = [[NSDateComponents alloc] init];
components.minute = 0;
NSCalendarOptions options = roundDown ? (NSCalendarMatchNextTime | NSCalendarSearchBackwards) : NSCalendarMatchNextTime;
NSDate *nearestDate = [calendar nextDateAfterDate:now matchingComponents: components options:  options];
NSInteger nearestHour = [calendar component:NSCalendarUnitHour fromDate: nearestDate];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36627621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档