更改NSDate对象的年,月和日

rev*_*kpi 14 iphone ios

在我的iPhone应用程序中,我有一个事件的开始日期,例如:2013-05-17 15:00:12 +0000.我的问题是,如何在今天更改2013-05-17,但是时间相同?

Cap*_*uff 36

您需要收集日期组件并修改所需的属性.

//gather current calendar
NSCalendar *calendar = [NSCalendar currentCalendar];

//gather date components from date
NSDateComponents *dateComponents = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:[NSDate date]];

//set date components
[dateComponents setDay:17];
[dateComponents setMonth:5];
[dateComponents setYear:2013];

//save date relative from date
NSDate *date = [calendar dateFromComponents:dateComponents];
Run Code Online (Sandbox Code Playgroud)

或者,或者您可以在1天内添加秒数来增加值:

NSDate *date = [NSDate dateWithTimeInterval:((60 * 60) * 24) sinceDate:[NSDate date]];
Run Code Online (Sandbox Code Playgroud)


ram*_*a n 10

Swift 3和IOS 10.2

    let calendar = Calendar.current

    var dateComponents: DateComponents? = calendar.dateComponents([.hour, .minute, .second], from: Date())

    dateComponents?.day = 17
    dateComponents?.month = 5
    dateComponents?.year = 2013

    let date: Date? = calendar.date(from: dateComponents!)
    print(date!)
Run Code Online (Sandbox Code Playgroud)

Swift 3和IOS 10.2


onm*_*133 8

在我的博客上阅读更多内容https://github.com/onmyway133/blog/issues/54

今天我试图在Swift中将Date对象的年份更改为2000.

let date = Date()
Run Code Online (Sandbox Code Playgroud)

首先,我尝试过,date(bySetting:)但它与去年没有用.它只返回零

Calendar.current.date(bySetting: .year, value: 2000, of: date)
Run Code Online (Sandbox Code Playgroud)

其次,我尝试过dateComponents.在component.year发生了变化,但它仍日历返回原来的日期,很奇怪!.无论我使用什么时区和日历,它仍然存在这个问题

var component = calendar.dateComponents(in: TimeZone.current, from: base)
component.year = year
Calendar.current.date(from: component)
Run Code Online (Sandbox Code Playgroud)

最后,我试图更明确,并且它有效

var component = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: base)
component.year = year
Calendar.current.date(from: component)
Run Code Online (Sandbox Code Playgroud)