sourcetip

NS 날짜 가져오기 년/월/일

fileupload 2023. 5. 28. 20:59
반응형

NS 날짜 가져오기 년/월/일

연도/월/일을 확인하려면 어떻게 해야 합니까?NSDate다른 정보는 없습니까?이와 유사한 작업을 수행하면 다음과 같은 작업을 수행할 수 있습니다.

NSCalendar *cal = [[NSCalendar alloc] init];
NSDateComponents *components = [cal components:0 fromDate:date];
int year = [components year];
int month = [components month];
int day = [components day];

하지만 그것은 간단한 것을 얻는 것처럼 매우 번거로운 것처럼 보입니다.NSDate의 연도/월/일다른 해결책이 있습니까?

이 답변이 제가 가장 많이 사용하는 답변이기 때문에 조금 더 많은 정보를 포함하도록 편집해 보겠습니다.

그 이름에도 불구하고,NSDate날짜가 아니라 단순히 기계 시간의 한 지점을 표시합니다.지정된 시점 간에는 상관 관계가 없습니다.NSDate1년, 1개월 또는 1일.그러기 위해서는 달력을 참고해야 합니다.지정된 시점은 현재 보고 있는 달력에 따라 다른 날짜 정보를 반환합니다(예를 들어 그레고리력과 유대력 모두에서 날짜가 동일하지 않습니다). 그레고리력이 세계에서 가장 널리 사용되는 달력인 반면, 우리는 약간 편향되어 있습니다.NSDate항상 사용해야 합니다. NSDate운 좋게도, 훨씬 더 초당적입니다.


날짜와 시간을 얻는 것은 시간이 지나야 할 것입니다.NSCalendar말씀하신 대로 더 간단한 방법이 있습니다.

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];

이는 다음을 생성합니다.NSDateComponents현재 시스템 달력의 현재 날짜, 월 및 연도를 포함하는 개체입니다. 참고: 이 달력은 반드시 현재 사용자가 지정한 달력이 아니며 기본 시스템 달력일 뿐입니다.

물론 다른 달력이나 날짜를 사용하는 경우 쉽게 변경할 수 있습니다.사용 가능한 달력 및 달력 단위 목록은 클래스 참조에서 확인할 수 있습니다.에 대한 자세한 정보NSDateComponents클래스 참조에서 찾을 수 있습니다.


참고로, 에서 개별 구성 요소 액세스NSDateComponents상당히 쉽습니다.

NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

다음과 같은 사항을 염두에 두어야 합니다.NSDateComponents해당 유효한 정보(예: 요청)를 사용하여 필드를 생성하지 않으면 요청한 필드에 대한 유효한 정보가 포함되지 않습니다.NSCalendar그 정보를 제공하기 위해NSCalendarUnit.NSDateComponents참조 정보 자체가 포함되어 있지 않습니다. 참조 정보는 사용자가 액세스할 수 있도록 숫자를 저장하는 단순한 구조일 뿐입니다.예를 들어, 당신이 또한 한 시대를 얻고 싶다면,NSDateComponents생성기 방법을 입력해야 합니다.NSCalendarNSCalendarUnitEra 깃발

NSDateFormatter를 사용하여 NSDate의 별도 구성 요소를 가져올 수 있습니다.

NSDateFormatter *df = [[NSDateFormatter alloc] init];

[df setDateFormat:@"dd"];
myDayString = [df stringFromDate:[NSDate date]];

[df setDateFormat:@"MMM"];
myMonthString = [df stringFromDate:[NSDate date]];

[df setDateFormat:@"yy"];
myYearString = [df stringFromDate:[NSDate date]];

하는 "MM"을에는 "MM"을 사용합니다.[myDayString intValue];

Itai의 우수한(그리고 작동 중인) 코드를 다시 정의하기 위해, 주어진 NSDate 변수의 연도 값을 반환하는 샘플 도우미 클래스는 다음과 같습니다.

보시다시피 이 코드를 수정하여 월 또는 일을 얻을 수 있습니다.

+(int)getYear:(NSDate*)date
{
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date];

    int year = [components year];
    int month = [components month];
    int day = [components day];

    return year;
}

(2013년에 이렇게 기본적인 iOS 날짜 기능을 직접 작성해야 한다는 것이 믿기지 않습니다...)

한 가지 더 말하자면, 두 개의 NSDate 값을 비교하기 위해 <과 >를 사용하지 마십시오.

XCode는 이러한 코드를 (오류나 경고 없이) 기쁘게 받아들일 것이지만, 그 결과는 복권입니다.NSDates를 비교하려면 "비교" 기능을 사용해야 합니다.

if ([date1 compare:date2] == NSOrderedDescending) {
    // date1 is greater than date2        
}

Swift 2.0의 경우:

    let date = NSDate()
    let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
    let components = calendar.components([.Month, .Day], fromDate: date)

    let (month, day) = (components.month, components.day)

이것이 당신에게 선택권을 돌려주지 않는 유일한 접근 방식이기 때문에 이 답변을 씁니다.NSDateComponent변수 및/또는 강제로 해당 변수를 풀 수 있습니다(스위프트 3의 경우도 해당).

스위프트 3

let date = Date()
let cal = Calendar.current
let year = cal.component(.year, from: date)
let month = cal.component(.month, from: date)
let day = cal.component(.day, from: date)

스위프트 2

let date = NSDate()
let cal = NSCalendar.currentCalendar()
let year = cal.component(.Year, fromDate: date)
let month = cal.component(.Month, fromDate: date)
let day = cal.component(.Day, fromDate: date)

보너스 스위프트 3 재미있는 버전

let date = Date()
let component = { (unit) in return Calendar.current().component(unit, from: date) }
let year = component(.year)
let month = component(.month)
let day = component(.day)

새로운 iOS 8

ObjC

NSDate *date = [NSDate date];
NSInteger era, year, month, day;
[[NSCalendar currentCalendar] getEra:&era year:&year month:&month day:&day fromDate:date];

스위프트

let date = NSDate.init()
var era = 0, year = 0, month = 0, day = 0
NSCalendar.currentCalendar().getEra(&era, year:&year, month:&month, day:&day, fromDate: date)

8를 타겟으로 iOS 8+를 할 수 .NSCalendar보다 간결한 형식으로 이를 달성하기 위한 편리한 방법.

먼저 다음을 생성합니다.NSCalendar그리고 무엇이든 사용합니다.NSDate필수 항목입니다.

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];

다음을 통해 구성 요소를 개별적으로 추출할 수 있습니다.component:fromDate:

NSInteger year = [calendar component:NSCalendarUnitYear fromDate:date];
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:date];
NSInteger day = [calendar component:NSCalendarUnitDay fromDate:date];

더 는또더간말하면히단,말면하▁or▁use,히단간▁more,NSInteger를 통한 getEra:year:month:day:fromDate:

NSInteger year, month, day;
[calendar getEra:nil year:&year month:&month day:&day fromDate:date];

자세한 정보와 예제는 iOS 8에서 NSDate Manipulation Made Easy를 확인하십시오.면책 성명, 제가 게시물을 작성했습니다.

iOS 8.0(및 OS X 10)부터는 구성 요소 방법을 사용하여 다음과 같이 단일 날짜 구성 요소를 쉽게 가져올 수 있습니다.

int year = [[NSCalendar currentCalendar] component:NSCalendarUnitYear fromDate:[NSDate date]];

일을 더 단순하게 만들고 이것이 효율적으로 구현되기를 바랍니다.

    NSDate *currDate = [NSDate date];
    NSCalendar*       calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents* components = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:currDate];
    NSInteger         day = [components day];
    NSInteger         month = [components month];
    NSInteger         year = [components year];
    NSLog(@"%d/%d/%d", day, month, year);

NSDate에서 개별 NSDate 구성 요소를 가져오려면 이타이 퍼버가 제안한 솔루션이 반드시 필요합니다.그러나 NSDate에서 NSString으로 직접 이동하려면 NSDateFormatter를 사용할 수 있습니다.

다음을 시도합니다.

    NSString *birthday = @"06/15/1977";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MM/dd/yyyy"];
    NSDate *date = [formatter dateFromString:birthday];
    if(date!=nil) {
        NSInteger age = [date timeIntervalSinceNow]/31556926;
        NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:date];
        NSInteger day = [components day];
        NSInteger month = [components month];
        NSInteger year = [components year];

        NSLog(@"Day:%d Month:%d Year:%d Age:%d",day,month,year,age);
    }
    [formatter release];

Swift의 솔루션은 다음과 같습니다.

let todayDate = NSDate()
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!

// Use a mask to extract the required components. Extract only the required components, since it'll be expensive to compute all available values.
let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: todayDate)

var (year, month, date) = (components.year, components.month, components.day) 

이것 좀 드셔보세요.

코드 조각:

 NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
 int year = [components year];
 int month = [components month];
 int day = [components day];

현재 연도, 월, 날짜를 제공합니다.

스위프트

날짜 요소를 선택적 문자열로 쉽게 가져올 수 있습니다.

extension Date {

  // Year 
  var currentYear: String? {
    return getDateComponent(dateFormat: "yy")
    //return getDateComponent(dateFormat: "yyyy")
  }

  // Month 
  var currentMonth: String? {
    return getDateComponent(dateFormat: "M")
    //return getDateComponent(dateFormat: "MM")
    //return getDateComponent(dateFormat: "MMM")
    //return getDateComponent(dateFormat: "MMMM")
  }


  // Day
  var currentDay: String? {
    return getDateComponent(dateFormat: "dd")
    //return getDateComponent(dateFormat: "d")
  }


  func getDateComponent(dateFormat: String) -> String? {
    let format = DateFormatter()
    format.dateFormat = dateFormat
    return format.string(from: self)
  }


}

let today = Date()
print("Current Year - \(today.currentYear)")  // result Current Year - Optional("2017")
print("Current Month - \(today.currentMonth)")  // result Current Month - Optional("7")
print("Current Day - \(today.currentDay)")  // result Current Day - Optional("10")

스위프트 2.x

extension NSDate {
    func currentDateInDayMonthYear() -> String {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "d LLLL yyyy"
        return dateFormatter.stringFromDate(self)
    }
}

다음과 같이 사용할 수 있습니다.

NSDate().currentDateInDayMonthYear()

산출량

6 March 2016

저는 이런 식으로 합니다.

NSDate * mydate = [NSDate date];

NSCalendar * mycalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSCalendarUnit units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;

NSDateComponents * myComponents  = [mycalendar components:units fromDate:mydate];

NSLog(@"%d-%d-%d",myComponents.day,myComponents.month,myComponents.year);

사람이 읽을 수 있는 문자열(일, 월, 연도)을 얻으려면 다음 작업을 수행합니다.

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *string = [dateFormatter stringFromDate:dateEndDate];

언급URL : https://stackoverflow.com/questions/3694867/nsdate-get-year-month-day

반응형