web-dev-qa-db-ja.com

NSDateから時間をどのように減算しますか?

日付から4時間を引いてみたいのですが。次のコードを使用して、日付文字列をNSDateオブジェクトに読み込みます。

NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate * mydate = [dateFormatter dateFromString:[dict objectForKey:@"published"]];

次に何をしますか?

29
Miriam Roberts
NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4];

ドキュメントへのリンク


NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4
                                              sinceDate:theDate]] autorelease];

ドキュメントへのリンク

49
Georg Schölly

NSCalendarは、人間の時間単位に基づいて日付を変更するための一般的なAPIです。これには、NSCalendarの -dateByAddingComponents:toDate:options: 負の時間数。

23
Chuck

IOS 8以降、より便利なdateByAddingUnitがあります:

Swift 2.x

//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrentCalendar()
newDate = calendar.dateByAddingUnit(.Hour, value: -3, toDate: originalDate, options: [])
6
Ben Packard
//in Swift 3
//subtract 3 hours
let calendar = NSCalendar.autoupdatingCurrent
newDate = calendar.date(byAdding:.hour, value: -3, to: originalDate)
5
Ning

In Swift 4:

var baseDate = ... // something
let dateMinus4Hours = Calendar.current.date(byAdding: .hour, value: -4, to: baseDate)

24*3600などと一緒に行かないでください。問題が発生します。

2

dateFromString関数は、NSStringではなくNSDateを返します。あなたは変えるべきです、

NSDate * theDate = [dateFormatter dateFromString:datetemp];

1
Guvener Gokce

ここでは、日付と月、そして最終的には年も変更される可能性があることを考慮して、日付-4時間を返すので便利な関数です。 .searchBackwardオプションは重要な部分です:)

public static func correctSecondComponent(date: Date, calendar: Calendar = Calendar(identifier: Calendar.Identifier.gregorian))->Date {

    let hour = calendar.component(.hour, from: date)

    let e = (calendar as NSCalendar).date(byAdding: NSCalendar.Unit.hour, value: -4, to: date, options:.searchBackwards)!

    return e
}
1
Pe Gra