2010 년 1 월 1 일과 2010 년 2 월 3 일 사이의 날짜를 어떻게 계산할 수 있습니까?
2010 년 1 월 1 일과 2010 년 2 월 3 일 사이의 날짜를 어떻게 계산할 수 있습니까?
답변:
NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"];
NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
int numberOfDays = secondsBetween / 86400;
NSLog(@"There are %d days in between the two dates.", numberOfDays);
NSDate
객체는 정확한 시간을 나타내며 연관된 시간대 정보가 없음을 기억 하십시오. 당신이를 예를 사용하여 문자열을 날짜로 변환 할 때 NSDateFormatter
의 NSDateFormatter
변환 구성된 시간대에서 시간. 따라서 두 NSDate
개체 사이의 시간 (초) 은 항상 시간대와 무관합니다.
게다가이 문서 는 Cocoa의 시간 구현이 윤초를 고려하지 않는다고 명시하고 있습니다. 따라서 그러한 정확성이 필요한 경우 자체 구현을 롤링해야합니다.
cocoa
아니라 cocoa-touch
이 답변은 맥 OS X에 적용되도록
다음과 같이 사용할 수 있습니다.
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];
days = [components day];
이 방법은 일광 절약 시간이 변경되는 날짜와 같은 상황을 설명한다고 생각합니다.
NSDate
객체는 이미 시간대에 구애받지 않습니다. 예를 들어 날짜를 구문 분석 할 때 시간대 정보가 제거 NSDateFormatter
되어 NSDate
객체가 정확한 시간을 나타냅니다. 당신이 이미 가지고있는 경우에 따라서, startDate
그리고 endDate
이 두 개체가있을 것입니다 X의 별도의 초 수. 시간대는 그것과 아무 관련이 없습니다.
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds
어디에 date1
와 date2
있습니다 NSDate
.
또한 다음의 정의에 유의하십시오 NSTimeInterval
.
typedef double NSTimeInterval;
이것을 확인하십시오. 그것은 계산에 iOS 캘린더를 사용하여 일광 절약, 윤년을 처리합니다. 시간과 일에 분을 포함하도록 문자열과 조건을 변경할 수 있습니다.
+(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate
{
NSDateComponents *components;
NSInteger days;
NSInteger hour;
NSInteger minutes;
NSString *durationString;
components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute fromDate: startDate toDate: endDate options: 0];
days = [components day];
hour = [components hour];
minutes = [components minute];
if(days>0)
{
if(days>1)
durationString=[NSString stringWithFormat:@"%d days",days];
else
durationString=[NSString stringWithFormat:@"%d day",days];
return durationString;
}
if(hour>0)
{
if(hour>1)
durationString=[NSString stringWithFormat:@"%d hours",hour];
else
durationString=[NSString stringWithFormat:@"%d hour",hour];
return durationString;
}
if(minutes>0)
{
if(minutes>1)
durationString = [NSString stringWithFormat:@"%d minutes",minutes];
else
durationString = [NSString stringWithFormat:@"%d minute",minutes];
return durationString;
}
return @"";
}
Swift 5 및 iOS 12에서는 필요에 따라 다음 두 가지 방법 중 하나를 사용하여 두 날짜의 차이를 찾을 수 있습니다.
Calendar
의 dateComponents(_:from:to:)
방법을import Foundation
let calendar = Calendar.current
let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!
let dateComponents = calendar.dateComponents([Calendar.Component.day], from: startDate, to: endDate)
print(dateComponents) // prints: day: 1621 isLeapMonth: false
print(String(describing: dateComponents.day)) // prints: Optional(1621)
DateComponentsFormatter
의 string(from:to:)
방법을import Foundation
let calendar = Calendar.current
let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [NSCalendar.Unit.day]
let elapsedTime = formatter.string(from: startDate, to: endDate)
print(String(describing: elapsedTime)) // prints: Optional("1,621 days")
Swift 4
이것을 시도하고 (문자열이있는 날짜 범위)를보십시오 :
// Start & End date string
let startingAt = "01/01/2018"
let endingAt = "08/03/2018"
// Sample date formatter
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
// start and end date object from string dates
var startDate = dateFormatter.date(from: startingAt) ?? Date()
let endDate = dateFormatter.date(from: endingAt) ?? Date()
// Actual operational logic
var dateRange: [String] = []
while startDate <= endDate {
let stringDate = dateFormatter.string(from: startDate)
startDate = Calendar.current.date(byAdding: .day, value: 1, to: startDate) ?? Date()
dateRange.append(stringDate)
}
print("Resulting Array - \(dateRange)")
스위프트 3
var date1 = Date(string: "2010-01-01 00:00:00 +0000")
var date2 = Date(string: "2010-02-03 00:00:00 +0000")
var secondsBetween: TimeInterval = date2.timeIntervalSince(date1)
var numberOfDays: Int = secondsBetween / 86400
print(numberOfDays)
차이를 찾으려면 현재 날짜와 미래 날짜를 가져와야합니다. 다음의 경우 미래 날짜의 예로 2 일을 사용했습니다. 계산 방법 :
2 days
* 24 hours
* 60 minutes
* 60 seconds
. 2 일의 시간 (초)은 172,800 초가 될 것으로 예상합니다.
// Set the current and future date
let now = Date()
let nowPlus2Days = Date(timeInterval: 2*24*60*60, since: now)
// Get the number of seconds between these two dates
let secondsInterval = DateInterval(start: now, end: nowPlus2Days).duration
print(secondsInterval) // 172800.0