NSDate에 1일을 추가하려면 어떻게 해야 합니까?
기본적으로 제목대로.어떻게 하루를 추가할 수 있는지 궁금합니다.NSDate.
만약 그렇다면:
21st February 2011
다음과 같습니다.
22nd February 2011
또는 만약 그렇다면:
31st December 2011
다음과 같습니다.
1st January 2012.
Swift 5.0:
var dayComponent = DateComponents()
dayComponent.day = 1 // For removing one day (yesterday): -1
let theCalendar = Calendar.current
let nextDate = theCalendar.date(byAdding: dayComponent, to: Date())
print("nextDate : \(nextDate)")
목표 C:
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;
NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDate *nextDate = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];
NSLog(@"nextDate: %@ ...", nextDate);
이것은 스스로 설명할 수 있어야 합니다.
iOS 8부터 사용할 수 있습니다.NSCalendar.dateByAddingUnit
Swift 1.x의 예:
let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
.dateByAddingUnit(
.CalendarUnitDay,
value: 1,
toDate: today,
options: NSCalendarOptions(0)
)
Swift 2.0:
let today = NSDate()
let tomorrow = NSCalendar.currentCalendar()
.dateByAddingUnit(
.Day,
value: 1,
toDate: today,
options: []
)
Swift 3.0:
let today = Date()
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)
스위프트 5
let today = Date()
let nextDate = Calendar.current.date(byAdding: .day, value: 1, to: today)
목표-C
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
// now build a NSDate object for the next day
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];
NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate: [NSDate date] options:0];
iOS 8+, OSX 10.9+, 목표-C
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *tomorrow = [cal dateByAddingUnit:NSCalendarUnitDay
value:1
toDate:[NSDate date]
options:0];
높은 유지보수의 답변과 바이킹오세군도의 코멘트를 기반으로 작동하는 Swift 3+ 구현.이 날짜 확장에는 연도, 월 및 시간을 변경할 수 있는 추가 옵션도 있습니다.
extension Date {
/// Returns a Date with the specified amount of components added to the one it is called with
func add(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date? {
let components = DateComponents(year: years, month: months, day: days, hour: hours, minute: minutes, second: seconds)
return Calendar.current.date(byAdding: components, to: self)
}
/// Returns a Date with the specified amount of components subtracted from the one it is called with
func subtract(years: Int = 0, months: Int = 0, days: Int = 0, hours: Int = 0, minutes: Int = 0, seconds: Int = 0) -> Date? {
return add(years: -years, months: -months, days: -days, hours: -hours, minutes: -minutes, seconds: -seconds)
}
}
OP의 요청에 따라 하루를 추가하는 경우에만 사용할 수 있습니다.
let today = Date() // date is then today for this example
let tomorrow = today.add(days: 1)
Swift 4.0 (이 멋진 답변에서 Swift 3.0과 동일한 것은 나 같은 신인들에게 분명하게 해줍니다.)
let today = Date()
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today)
Swift 4에 대한 업데이트:
let now = Date() // the current date/time
let oneDayFromNow = Calendar.current.date(byAdding: .day, value: 1, to: now) // Tomorrow with same time of day as now
아래 함수를 사용하고 days 매개 변수를 사용하여 날짜 날짜를 가져옵니다.앞으로/뒤로 매개 변수를 미래 날짜에 대해 양수 또는 이전 날짜에 대해 음수로 전달:
+ (NSDate *) getDate:(NSDate *)fromDate daysAhead:(NSUInteger)days
{
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = days;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *previousDate = [calendar dateByAddingComponents:dateComponents
toDate:fromDate
options:0];
[dateComponents release];
return previousDate;
}
신속하게
var dayComponenet = NSDateComponents()
dayComponenet.day = 1
var theCalendar = NSCalendar.currentCalendar()
var nextDate = theCalendar.dateByAddingComponents(dayComponenet, toDate: NSDate(), options: nil)
효과가 있습니다!
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitDay;
NSInteger value = 1;
NSDate *today = [NSDate date];
NSDate *tomorrow = [calendar dateByAddingUnit:unit value:value toDate:today options:NSCalendarMatchStrictly];
Swift 3.0의 매우 간단한 구현은 다음과 같습니다.
func dateByAddingDays(inDays: Int) -> Date {
let today = Date()
return Calendar.current.date(byAdding: .day, value: inDays, to: today)!
}
스위프트 4.0
extension Date {
func add(_ unit: Calendar.Component, value: Int) -> Date? {
return Calendar.current.date(byAdding: unit, value: value, to: self)
}
}
사용.
date.add(.day, 3)! // adds 3 days
date.add(.day, -14)! // subtracts 14 days
참고: 코드 줄이 느낌표로 끝나는 이유를 모르면 Google에서 "Swift Options"를 찾아보십시오.
NSDate *today=[NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components=[[NSDateComponents alloc] init];
components.day=1;
NSDate *targetDate =[calendar dateByAddingComponents:components toDate:today options: 0];
임의의 날짜로부터 어제 및 내일에 대한 단순 Swift 확장:
extension Date {
var previousDay: Date {
Calendar.current.date(byAdding: DateComponents(day:-1), to: self)!
}
var nextDay: Date {
Calendar.current.date(byAdding: DateComponents(day:+1), to: self)!
}
}
다음 질문에 대한 조언에 따라 옵션을 강제로 포장 해제합니다.
dateByAddingComponent:toDate:options가 0으로 반환되는 날짜는 언제입니까?
Swift 2.1.1 및 xcode 7.1 OSX 10.10.5에서는 함수를 사용하여 앞뒤로 원하는 일수를 추가할 수 있습니다.
func addDaystoGivenDate(baseDate:NSDate,NumberOfDaysToAdd:Int)->NSDate
{
let dateComponents = NSDateComponents()
let CurrentCalendar = NSCalendar.currentCalendar()
let CalendarOption = NSCalendarOptions()
dateComponents.day = NumberOfDaysToAdd
let newDate = CurrentCalendar.dateByAddingComponents(dateComponents, toDate: baseDate, options: CalendarOption)
return newDate!
}
현재 날짜를 9일 증가시키는 함수 호출
var newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: 9)
print(newDate)
현재 날짜를 80일 감소시키는 함수 호출
newDate = addDaystoGivenDate(NSDate(), NumberOfDaysToAdd: -80)
print(newDate)
다음은 지정된 날짜에 모든 유형의 단위(연도/월/일/시간/초 등)를 추가/감산할 수 있는 범용 방법입니다.
Swift 2.2 사용
func addUnitToDate(unitType: NSCalendarUnit, number: Int, date:NSDate) -> NSDate {
return NSCalendar.currentCalendar().dateByAddingUnit(
unitType,
value: number,
toDate: date,
options: NSCalendarOptions(rawValue: 0))!
}
print( addUnitToDate(.Day, number: 1, date: NSDate()) ) // Adds 1 Day To Current Date
print( addUnitToDate(.Hour, number: 1, date: NSDate()) ) // Adds 1 Hour To Current Date
print( addUnitToDate(.Minute, number: 1, date: NSDate()) ) // Adds 1 Minute To Current Date
// NOTE: You can use negative values to get backward values too
NSDateComponents *dayComponent = [[[NSDateComponents alloc] init] autorelease];
dayComponent.day = 1;
NSCalendar *theCalendar = [NSCalendar currentCalendar];
dateToBeIncremented = [theCalendar dateByAddingComponents:dayComponent toDate:dateToBeIncremented options:0];
좋아요 - 저는 이것이 저에게 효과가 있을 거라고 생각했어요.그러나 이를 사용하여 2013년 3월 31일에 하루를 추가하면 23시간만 추가된 날짜가 반환됩니다.실제로는 24를 가질 수 있지만 계산에 사용하면 23:00 시간만 추가됩니다.
마찬가지로, 2013년 10월 28일로 앞당기면 코드에 25시간이 추가되어 날짜 시간은 2013-10-280 01:00:00이 됩니다.
하루를 추가하기 위해 맨 위에 있는 작업을 수행하고 다음을 추가했습니다.
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
주로 일광 절약 때문에 복잡합니다.
NSDate를 할 수 .- (id)dateByAddingTimeInterval:(NSTimeInterval)secondsseconds되요지일 입니다.60 * 60 * 24 = 86400
NSDate에서 메서드를 추가하도록 빠르게 확장할 수 있습니다.
extension NSDate {
func addNoOfDays(noOfDays:Int) -> NSDate! {
let cal:NSCalendar = NSCalendar.currentCalendar()
cal.timeZone = NSTimeZone(abbreviation: "UTC")!
let comps:NSDateComponents = NSDateComponents()
comps.day = noOfDays
return cal.dateByAddingComponents(comps, toDate: self, options: nil)
}
}
당신은 이것을 사용할 수 있습니다.
NSDate().addNoOfDays(3)
NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *tomorrowDate = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE, dd MMM yyyy"];
NSLog(@"%@", [dateFormatter stringFromDate:tomorrowDate]);
swift 2.2의 경우:
let today = NSDate()
let tomorrow = NSCalendar.currentCalendar().dateByAddingUnit(
.Day,
value: 1,
toDate: today,
options: NSCalendarOptions.MatchStrictly)
이것이 누군가에게 도움이 되기를 바랍니다!
swift 5에 대한 업데이트
let nextDate = fromDate.addingTimeInterval(60*60*24)
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components];
NSLog(@"StartDate = %@", startDate);
components.day += 1;
NSDate *endDate = [calendar dateFromComponents:components];
NSLog(@"EndDate = %@", endDate);
저도 같은 문제가 있었습니다. NSDate에 대한 확장을 사용하십시오.
- (id)dateByAddingYears:(NSUInteger)years
months:(NSUInteger)months
days:(NSUInteger)days
hours:(NSUInteger)hours
minutes:(NSUInteger)minutes
seconds:(NSUInteger)seconds
{
NSDateComponents * delta = [[[NSDateComponents alloc] init] autorelease];
NSCalendar * gregorian = [[[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian] autorelease];
[delta setYear:years];
[delta setMonth:months];
[delta setDay:days];
[delta setHour:hours];
[delta setMinute:minutes];
[delta setSecond:seconds];
return [gregorian dateByAddingComponents:delta toDate:self options:0];
}
스위프트 2.0
let today = NSDate()
let calendar = NSCalendar.currentCalendar()
let tomorrow = calendar.dateByAddingUnit(.Day, value: 1, toDate: today, options: NSCalendarOptions.MatchFirst)
Swift 4, "1 캘린더 데이"가 아닌 24시간 교대 근무(60*60*24초)만 필요한 경우
미래:let dayAhead = Date(timeIntervalSinceNow: TimeInterval(86400.0))
과거:let dayAgo = Date(timeIntervalSinceNow: TimeInterval(-86400.0))
문자열 확장명:String_Date > 날짜 변환
extension String{
func DateConvert(oldFormat:String)->Date{ // format example: yyyy-MM-dd HH:mm:ss
let isoDate = self
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = oldFormat
return dateFormatter.date(from:isoDate)!
}
}
날짜 확장:변환 날짜 > 문자열
extension Date{
func DateConvert(_ newFormat:String)-> String{
let formatter = DateFormatter()
formatter.dateFormat = newFormat
return formatter.string(from: self)
}
}
날짜 확장:+/- 날짜 가져오기
extension String{
func next(day:Int)->Date{
var dayComponent = DateComponents()
dayComponent.day = day
let theCalendar = Calendar.current
let nextDate = theCalendar.date(byAdding: dayComponent, to: Date())
return nextDate!
}
func past(day:Int)->Date{
var pastCount = day
if(pastCount>0){
pastCount = day * -1
}
var dayComponent = DateComponents()
dayComponent.day = pastCount
let theCalendar = Calendar.current
let nextDate = theCalendar.date(byAdding: dayComponent, to: Date())
return nextDate!
}
}
용도:
let today = Date()
let todayString = "2020-02-02 23:00:00"
let newDate = today.DateConvert("yyyy-MM-dd HH:mm:ss") //2020-02-02 23:00:00
let newToday = todayString.DateConvert(oldFormat: "yyyy-MM-dd HH:mm:ss")//2020-02-02
let newDatePlus = today.next(day: 1)//2020-02-03 23:00:00
let newDateMinus = today.past(day: 1)//2020-02-01 23:00:00
질문 : 여질에서문러.
NSDate에 1일을 추가하려면 어떻게 해야 합니까?
양을 음으로 변환하고 음을 양으로 변환하는 수학 함수?
NSString을 NSDate로 변환하는 중(그리고 다시)
Swift 4 또는 Swift 5에서는 다음과 같이 사용할 수 있습니다.
let date = Date()
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: date)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let yesterday_date = dateFormatter.string(from: yesterday!)
print("yesterday->",yesterday_date)
출력:
Current date: 2020-03-02
yesterday date: 2020-03-01
재미로 몇 가지 확장과 연산자 오버로드를 사용하면 다음과 같은 좋은 결과를 얻을 수 있습니다.
let today = Date()
let tomorrow = today + 1.days
또는
var date = Date()
date += 1.months
다음은 지원 코드입니다.
extension Calendar {
struct ComponentWithValue {
let component: Component
let value: Int
}
}
extension Int {
var days: Calendar.ComponentWithValue {
.init(component: .day, value: self)
}
var months: Calendar.ComponentWithValue {
.init(component: .month, value: self)
}
}
func +(_ date: Date, _ amount: Calendar.ComponentWithValue) -> Date {
Calendar.current.date(byAdding: amount.component, value: amount.value, to: date)!
}
func +(_ amount: Calendar.ComponentWithValue, _ date: Date) -> Date {
date + amount
}
func +=(_ date: inout Date, _ amount: Calendar.ComponentWithValue) {
date = date + amount
}
코드는 최소이며 쉽게 확장할 수 있습니다..months,.years,.hours(단, 감산지원등(▁for()-하게 추가할 수 를 원활하게 추가할 수 있습니다.
하지만, 강제로 포장을 뜯는 것은, 그것의 구현 안에 있습니다.+그러나 어떤 상황에서 캘린더가 0일을 반환할 수 있는지는 확실하지 않습니다.
다음 코드를 사용합니다.
NSDate *now = [NSDate date];
int daysToAdd = 1;
NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd];
~하듯이
addTimeInterval
이제 더 이상 사용되지 않습니다.
언급URL : https://stackoverflow.com/questions/5067785/how-do-i-add-1-day-to-an-nsdate
'programing' 카테고리의 다른 글
| NSNumber를 NSString으로 변환하는 방법 (0) | 2023.04.26 |
|---|---|
| UPDLOCK, HOLDLOCK에 대해 혼동됨 (0) | 2023.04.26 |
| Bash에서 구분 기호의 문자열을 분할하려면 어떻게 해야 합니까? (0) | 2023.04.26 |
| Linux에서 디렉토리를 루프오버하는 방법 (0) | 2023.04.21 |
| Storyboard 프로토타입 셀(Xcode 6, iOS 8 SDK)에서 UICollectionViewCell contentView 프레임의 자동 크기 조정 문제는 iOS 7에서만 발생합니다. (0) | 2023.04.21 |