두 날짜의 차이를 어떻게 계산할 수 있습니까?
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
는 구성된 표준 시간대로부터의 시간을 변환합니다.따라서 2개 사이의 초수NSDate
개체는 항상 시간대에 구애받지 않습니다.
또한, 본 문서에서는 Cocoa의 시간 구현이 도약 초를 설명하지 않는다는 점을 명시하고 있으므로, 이러한 정확성이 필요한 경우에는 자체 구현을 롤(roll)해야 합니다.
다음과 같은 것을 사용할 수 있습니다.
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];
days = [components day];
저는 이 방법이 일광 절약 시간에 걸쳐 있는 날짜와 같은 상황을 설명한다고 생각합니다.
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에서는 필요에 따라 다음 두 가지 방법 중 하나를 사용하여 날짜 간의 차이를 일 단위로 확인할 수 있습니다.
#1. 사용하기Calendar
의 방법
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)
#2. 사용하기DateComponentsFormatter
의 방법
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")
스위프트 4
이렇게 해보고 (String을 사용한 날짜 범위)를 확인합니다.
// 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)
가장 큰 단위뿐만 아니라 모든 단위를 원한다면 다음 두 가지 방법 중 하나를 사용합니다(@Ankish의 답변 기준).
출력 예시:28 D | 23 H | 59 M | 59 S
+ (NSString *) remaningTime:(NSDate *)startDate endDate:(NSDate *)endDate
{
NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *components = [[NSCalendar currentCalendar] components:units fromDate: startDate toDate: endDate options: 0];
return [NSString stringWithFormat:@"%ti D | %ti H | %ti M | %ti S", [components day], [components hour], [components minute], [components second]];
}
+ (NSString *) timeFromNowUntil:(NSDate *)endDate
{
return [self remaningTime:[NSDate date] endDate:endDate];
}
1970년 이후의 날짜와 시간 간격을 초 단위로 환산하면 그 차이를 알 수 있고 두 날짜의 차이를 알 수 있습니다.
차이를 찾으려면 현재 날짜와 미래 날짜를 구해야 합니다.다음의 경우, 저는 향후 날짜의 예시로 2일을 사용했습니다.계산 기준:
2 days
*24 hours
*60 minutes
*60 seconds
. 이틀간의 초수는 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
언급URL : https://stackoverflow.com/questions/4371757/how-can-i-calculate-the-difference-between-two-dates
'source' 카테고리의 다른 글
Zlib 압축이 워드프레스 다중 사이트의 파일에 대한 경로를 망쳤습니다. (0) | 2023.11.05 |
---|---|
json 개체에서 Angular.js 형식 날짜 (0) | 2023.11.05 |
mysql feature- scaling (0) | 2023.11.05 |
고유성 제약 조건을 조건부로 적용할 수 있습니까? (0) | 2023.11.05 |
내 html 페이지에 각도 변수 표시 (0) | 2023.10.31 |