6

私はNSDateをあまり使用していないので、私が行っている計算について助けを求めています。

私の店の閉店時間が深夜から数分である整数があります。基本的に、私の店は午後5時に閉まり、整数1020になります。

つまり、今は午後10時45分または22時45分です。00:00以降の整数は1365であり、これから私は言うことができます

if (storeHour < currentTime) {
      // closed!
}

ただし、NSDateから取得した「22.45」から00:00以降の時間を表す整数に変換する方法がわかりません。NSDateにそれを助けることができる何かがありますか?

どうも

4

5 に答える 5

7

NSDate独自のカスタム整数形式を使用する代わりに、オブジェクトを使用してストアが閉じる時間を保存することをお勧めします。NSDate日付と時刻の両方を表すのは残念です。

いずれにせよ、あなたはチェックすることができNSDateComponentsます。次のようなユーティリティメソッドを使用できます。

int minutesSinceMidnight:(NSDate *)date
{
    NSCalendar *gregorian = [[NSCalendar alloc]
        initWithCalendarIdentifier:NSGregorianCalendar];
    unsigned unitFlags =  NSHourCalendarUnit | NSMinuteCalendarUnit;
    NSDateComponents *components = [gregorian components:unitFlags fromDate:date];

    return 60 * [components hour] + [components minute];    
}
于 2009-11-30T04:01:53.467 に答える
4

Swift 5 これは例として、真夜中からの現在の分数を示します

let calendar = Calendar.current
let now = Date()

print(getMinutesSinceMidnight())

func getMinutesSinceMidnight() -> Int {
        return (calendar.component(.hour, from: now) * 60 + calendar.component(.minute, from: now))
 }
于 2020-01-20T16:18:42.473 に答える
3

@notnoopが返信したものの迅速なバージョン:

func minutesSinceMidnight(start : NSDate) -> Int {

    let units : NSCalendarUnit = [.Hour, .Minute]
    let components = NSCalendar.currentCalendar().components(units, fromDate: start)
    return 60 * components.hour + components.minute
}
于 2016-01-07T00:10:13.550 に答える
1

NSDate真夜中に設定されている別のものがある場合timeIntervalSinceDateは、NSDateオブジェクトのメソッドを使用しNSTimeIntervalて、2つの違いを取り戻すことができます。または、常に真夜中と現在の時刻を比較したい場合はtimeIntervalSinceNow、真夜中のNSDateでメソッドを呼び出すNSTimeIntervalと、真夜中と現在の時刻の差が(負ではありますが)返されます。

NSTimeIntervaldoubleは、秒数(および任意の小数秒)を保持する標準によって定義されます。

于 2009-11-30T03:56:45.923 に答える
0

これは、余分な計算を行わない現代的な方法です。

Objective-C

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *midnight = [calendar startOfDayForDate:[NSDate date]];
NSInteger minutesSinceMidnight = [calendar components:NSCalendarUnitMinute fromDate:midnight toDate:[NSDate date] options:0].minute;

Date拡張機能としてSwift3+

extension Date {
    func minutesSinceMidnight() -> Int {
        let calendar = Calendar.current
        let midnight = calendar.startOfDay(for: self)
        return calendar.dateComponents([.minute], from: midnight, to: self).minute!
    }
}

使用法:

print(Date().minutesSinceMidnight())
于 2020-01-20T17:00:29.447 に答える