trong ứng dụng iPhone của tôi Tôi có ngày bắt đầu sự kiện, ví dụ: 2013-05-17 15:00:12 +0000. Câu hỏi của tôi là, làm thế nào tôi có thể thay đổi 2013-05-17 với ngày hôm nay, nhưng để lại thời gian giống nhau?Thay đổi năm, tháng và ngày của đối tượng NSDate
Trả lời
Bạn cần thu thập các thành phần ngày tháng và sửa đổi các thuộc tính bắt buộc.
//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];
Dù rằng, hoặc bạn có thể thêm số giây trong 1 ngày để tăng giá trị:
NSDate *date = [NSDate dateWithTimeInterval:((60 * 60) * 24) sinceDate:[NSDate date]];
Bạn cần tìm sốOfSeconds của ngày hôm nay lúc 0 giờ sáng và số ngày khácOfSeconds lúc 0 giờ sáng. Tìm sự khác biệt giữa chúng. Sau đó, để numberOfSeconds của 2013-05-17 15:00:12 +0000 thêm sự khác biệt này.
Tại sao bạn không thể thay đổi ngày bắt đầu với ngày và giờ hiện tại bạn muốn sử dụng API dateWithString. Nếu không thì bạn có thể xem API dateByAddingTimeInterval của NSDate bằng cách lấy thời gian khác nhau giữa hai NSDate
Hoặc trong nhanh chóng:
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day], fromDate: NSDate.init())
components.day = 17
components.month = 5
components.year = 2013
let date = calendar.dateFromComponents(components)
Swift 3.0
Ngày nhận có Năm, Tháng & Ngày -5 từ Ngày hiện tại
//CurrentDate
let currentDate = Date()
let gregorianCalendar = Calendar(identifier: .gregorian)
var components = gregorianCalendar.dateComponents([.year, .month, .day], from: currentDate)
// Change int value which you want to minus from current Date.
components.day = components.day!-5
components.month = components.month!-5
components.year = components.year!-5
let date = gregorianCalendar.date(from: components)!
print("Current Date = \(currentDate)")
print("Old Date = \(date)")
Swift 2,0
//CurrentDate
let currentDate = NSDate()
let gregorianCalendar = NSCalendar(identifier: .gregorian)
var components = gregorianCalendar.dateComponents([.year, .month, .day], from: currentDate)
// Change int value which you want to minus from current Date.
components.day = components.day!-5
components.month = components.month!-5
components.year = components.year!-5
let date = gregorianCalendar.date(from: components)!
print("Current Date = \(currentDate)")
print("Old Date = \(date)")
Đọc thêm trên blog của tôi https://github.com/onmyway133/blog/issues/54
Hôm nay tôi đang cố gắng để thay đổi năm của một đối tượng Date đến 2000 trong Swift.
let date = Date()
Đầu tiên, tôi thử với date(bySetting:)
nhưng nó không hoạt động với năm ngoái. Nó chỉ đơn giản trả về nil
Calendar.current.date(bySetting: .year, value: 2000, of: date)
Thứ hai, tôi đã thử với dateComponents
. component.year
đã thay đổi, nhưng lịch vẫn trả về ngày ban đầu, rất lạ !!. Không có vấn đề gì múi giờ và lịch tôi sử dụng, nó vẫn có vấn đề này
var component = calendar.dateComponents(in: TimeZone.current, from: base)
component.year = year
Calendar.current.date(from: component)
Cuối cùng, tôi đã cố gắng để được rõ ràng hơn, và nó hoạt động
var component = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: base)
component.year = year
Calendar.current.date(from: component)
Mã này trả về nil cho tôi mỗi lần –
@WilliamT. Xin chào, tôi đã cập nhật câu trả lời của mình, vui lòng xem – onmyway133
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!)
Swift 3 & IOS 10.2
- 1. Trừ ngày/tháng/năm từ đối tượng Ngày
- 2. NSDate cho ngày đầu tiên của tháng
- 3. Dateformatter thay đổi năm của ngày của tôi
- 4. Chuyển đổi phút thành ngày, tuần, tháng và năm
- 5. Thay đổi tên Tháng và Ngày Gregorian thành Hồi giáo? NSDate
- 6. Chuyển đổi ngày bảng tính của Google thành đối tượng Ngày tháng JS?
- 7. NSPredicate: lọc đối tượng theo ngày thuộc tính NSDate
- 8. Tạo ngày giờ trong Rails bằng tháng, ngày và năm
- 9. bằng Python, Làm thế nào tôi có thể chuyển đổi một chuỗi thành một đối tượng ngày tháng và nhận được năm, tháng và ngày riêng biệt?
- 10. Django: Nhóm theo ngày (ngày, tháng, năm)
- 11. ngày tháng trước năm 1970
- 12. Định dạng NSDate với Tên Tháng/Ngày viết tắt
- 13. Đặt hàng theo ngày giảm dần - tháng, ngày và năm
- 14. Tách mảng đối tượng thành mảng mới dựa trên năm của ngày của đối tượng
- 15. Chuyển đổi một số (ngày) thành ngày, tháng và năm với jQuery
- 16. Định dạng ngày trong ngày, ngày tháng, năm
- 17. Android Làm thế nào để thay đổi Tổng số ngày thành năm, tháng và ngày chính xác?
- 18. Chuyển đổi đối tượng time_t thành NSDate?
- 19. ngày 29 tháng 2 so với ngày 28 tháng 2 của năm trước
- 20. NSDate trừ một tháng
- 21. Cho năm, tháng và ngày, tất cả trong int, làm thế nào tôi sẽ tạo ra một NSDate
- 22. Tạo trường ngày chỉ có tháng và năm - Drupal
- 23. Extract tháng, năm từ một đối tượng sở thú :: yearmon
- 24. Cách chọn ngày/tháng và năm từ jquery datepicker
- 25. MYSQL - Thay đổi năm ngày 2020-2011
- 26. javascript: nhận tháng/năm/ngày từ dấu thời gian unix
- 27. LINQ: Nhóm theo tháng và năm trong trường ngày giờ
- 28. Cách nhận năm và tháng kể từ ngày - PHP
- 29. Định dạng ngày giờ cho tháng và năm
- 30. Tạo thời gian ngày chỉ theo tháng và theo ngày, không năm
Thêm số giây trong 1 ngày giả định rằng tất cả các ngày đều có cùng số giây. Nhưng điều này sẽ phá vỡ cho một bước nhảy vọt thứ hai: https: //en.wikipedia.org/wiki/Leap_second –
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit không được chấp nhận. Sử dụng: (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) để thay thế. – Niraj