오늘 자정에 NSDate 객체를 어떻게 얻을 수 있습니까?
오늘 자정을 나타내는 NSDate 개체를 얻는 가장 효율적인 방법은 무엇입니까?
이 시도:
NSDate *const date = NSDate.date;
NSCalendar *const calendar = NSCalendar.currentCalendar;
NSCalendarUnit const preservedComponents = (NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay);
NSDateComponents *const components = [calendar components:preservedComponents fromDate:date];
NSDate *const normalizedDate = [calendar dateFromComponents:components];
iOS 8의 새로운 API
iOS 8에는 NSCalendar에 startOfDayForDate 라는 새로운 메서드가 포함되어 있습니다.이 메서드 는 정말 사용하기 쉽습니다.
let startOfToday = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
Apple의 설명 :
이 API는 주어진 날짜의 첫 번째 순간 날짜를 반환합니다. 예를 들어 "오늘"의 시작을 원하는 경우 [NSDate date]를 전달합니다. 자정이 두 번이면 첫 번째를 반환합니다. 아무것도 없으면 존재했던 첫 번째 순간을 반환합니다.
시간대에 관한 업데이트 :
startOfDayForDate는 NSCalendar의 메소드이므로 NSCalendar의 시간대를 사용합니다. 그래서 오늘이 로스 앤젤레스에서 시작된 뉴욕의 시간을보고 싶다면 다음과 같이 할 수 있습니다.
let losAngelesCalendar = NSCalendar.currentCalendar().copy() as! NSCalendar
losAngelesCalendar.timeZone = NSTimeZone(name: "America/Los_Angeles")!
let dateTodayBeganInLosAngeles = losAngelesCalendar.startOfDayForDate(NSDate())
dateTodayBeganInLosAngeles.timeIntervalSince1970
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .ShortStyle
dateFormatter.timeZone = NSTimeZone(name: "America/New_York")!
let timeInNewYorkWhenTodayBeganInLosAngeles = dateFormatter.stringFromDate(dateTodayBeganInLosAngeles)
print(timeInNewYorkWhenTodayBeganInLosAngeles) // prints "Jul 29, 2015, 3:00 AM"
NSCalendar *cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
[cal setTimeZone:[NSTimeZone systemTimeZone]];
NSDateComponents * comp = [cal components:( NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]];
[comp setMinute:0];
[comp setHour:0];
[comp setSecond:0];
NSDate *startOfToday = [cal dateFromComponents:comp];
자정을 23:59로 의미하는 경우 구성 요소의 시간을 23으로, 분을 59로 설정합니다.
다음 방법을 사용하여 NSDate의 자정 값을 가져올 수 있습니다.
- (NSDate *)dateAtBeginningOfDayForDate:(NSDate *)inputDate
{
// Use the user's current calendar and time zone
NSCalendar *calendar = [NSCalendar currentCalendar];
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
[calendar setTimeZone:timeZone];
// Selectively convert the date components (year, month, day) of the input date
NSDateComponents *dateComps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:inputDate];
// Set the time components manually
[dateComps setHour:0];
[dateComps setMinute:0];
[dateComps setSecond:0];
// Convert back
NSDate *beginningOfDay = [calendar dateFromComponents:dateComps];
return beginningOfDay;
}
Thkis는 여기 웹 사이트 에서 가져옵니다 .
빠른:
let cal = NSCalendar.currentCalendar()
//tip:NSCalendarUnit can be omitted, but with the presence of it, you can take advantage of Xcode's auto-completion
var comps = cal.components(NSCalendarUnit.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit | .HourCalendarUnit | .MinuteCalendarUnit | .SecondCalendarUnit, fromDate: NSDate())
comps.hour = 0
comps.minute = 0
comps.second = 0
let midnightOfToday = cal.dateFromComponents(comps)!
스위프트 2.2 :
let cal = NSCalendar.currentCalendar()
let comps = cal.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: NSDate())
comps.hour = 0
comps.minute = 0
comps.second = 0
let midnightOfToday = cal.dateFromComponents(comps)!
목표 -C :
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *comps = [cal components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:[NSDate date]];
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
NSDate *midnightOfToday = [cal dateFromComponents:comps];
iOS8에서는 startDayForDate를 사용할 수 있습니다.
따라서 오늘을 시작하려면 (Objective -C) :
NSDate * midnight;
midnight = [[NSCalendar currentCalendar] startOfDayForDate: [NSDate date]];
이 시도:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [gregorian components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:now];
NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"MM/dd/yyyy HH:mm:ss.SSS"];
NSLog(@"%@",[df stringFromDate:[gregorian dateFromComponents:components]]);
NSDate *now = [NSDate date];
NSDate *beginningOfToday = nil;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&beginningOfToday interval:NULL forDate:now];
당신은 사용할 수 NSCalendar '들dateBySettingHour:minute:second:ofDate:options:
따라서 다음을 수행하는 것만 큼 쉽습니다.
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSDate *midnight = [calendar dateBySettingHour:0 minute:0 second:0 ofDate:[NSDate date] options:0];
let calendar = NSCalendar.currentCalendar()
let unitFlags: NSCalendarUnit = [.Year, .Month, .Day, .Minute, .Second]
let components = calendar.components(unitFlags , fromDate: NSDate())
components.hour = 0
components.minute = 0
components.second = 0
//Gives Midnight time of today
let midnightOfToday = calendar.dateFromComponents(components)!
참고 URL : https://stackoverflow.com/questions/9040319/how-can-i-get-an-nsdate-object-for-today-at-midnight
'code' 카테고리의 다른 글
반응 구성 요소에서 CSS 파일을 가져 오는 방법은 무엇입니까? (0) | 2020.12.06 |
---|---|
유닉스 시스템에서 바이너리 파일을 편집하는 방법 (0) | 2020.12.06 |
타임 스탬프에서 T와 Z는 정확히 무엇을 의미합니까? (0) | 2020.12.05 |
OS X에서 "dnu"명령을 사용하는 방법은 무엇입니까? (0) | 2020.12.05 |
단 형성 제한이란 무엇입니까? (0) | 2020.12.05 |