2010-05-25 4 views

답변

3

참고있는 NSDate가에 대한 생각은 "일"단지 타임 스탬프이며에만 있음 주어진 달력과 시간대. 당신은 UTC 일하려면 현재 시간대의 태양력,

NSTimeZone * tz = [NSTimeZone localTimeZone]; 
CFAbsoluteTime at = CFDateGetAbsoluteTime((CFDateRef)date); 
int day = CFAbsoluteTimeGetGregorianDate(at, (CFTimeZoneRef)tz).day; 

을 원하는 경우에, tz = nil을 설정합니다.

또한 CFAbsoluteTime과 NSDate는 86400 초의 날짜를 지정하는 POSIX 시간을 기준으로 (필자가 아는 한)이므로 윤초는 처리하지 않습니다.

+0

가장 좋은 대답은 현재 시간대입니다. – Dmitry

+0

@Altaveron 그건 사실이 아닙니다. 예를 들어 단위 테스트에서는 전역 상태에 액세스하는 대신 명시 적 시간대를 지정하려고합니다. –

18

NSDate에서 캘린더 구성 요소를 가져 오는 방법은 this post입니다. 기본적으로이 같이 보일 것입니다 :

NSCalendar*  calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents* components = [calendar components:NSDayCalendarUnit 
              fromDate:myDate]; 
NSInteger   day = [components day]; 

(위의 메모리 관리를 잊지 마세요.)

+2

이렇게하는 방법입니다. 날짜 포맷터 및 기타 광기를 생성하지 않습니다. –

+1

이것은 OP가 원했던 것이고 아직 받아 들여지지 않은 대답 인 것 같습니다. – ohhh

5

NSDate의 "25"부분 만 필요하면 dateFormatter에서 가져올 수 있습니다. 같은

뭔가 : 오늘의 전체 이름의 형식으로

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd"]; 
NSString *dayInMonthStr = [dateFormatter stringFromDate:today]; 
int dayInMonth = [dayInMonthStr intValue]; 
[dateFormatter release]; 
NSLog(@"Today is the %i. day of the month", dayInMonth); 
2

사용 "EEEE".

요일의 짧은 이름 형식으로 "EEE"를 사용하십시오.

예 :

내가 잠시 다시이 문제가 있고, 나는 모든 것을 쉽게하기 위해 다음과 같은 방법을 만들어
- (NSString *)getDayOfTheWeek:(NSDate *)date{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init] ; 
    [dateFormatter setDateFormat:@"EEEE"]; 
    NSString *formattedDateString = [dateFormatter stringFromDate:date]; 
    return formattedDateString; 
    } 
-1

.


정의

#define DATE_TYPE_hhmmss [NSArray arrayWithObjects:@"h", @"m", @"s", nil] 
#define DATE_TYPE_MMDDYYYY [NSArray arrayWithObjects:@"M", @"D", @"Y", nil] 
#define DATE_TYPE_MMDDYYYYhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", nil] 
#define DATE_TYPE_MMDDYYYYWWhhmmss [NSArray arrayWithObjects:@"M", @"D", @"Y", @"W", @"h", @"m", @"s", nil] 
#define DATE_TYPE_MMDDYYYYhhmmssWW [NSArray arrayWithObjects:@"M", @"D", @"Y", @"h", @"m", @"s", @"W", nil] 
#define DATE_TYPE_YYYYMMDD [NSArray arrayWithObjects:@"Y", @"M", @"D", nil] 
#define DATE_TYPE_YYYYMMDDhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", nil] 
#define DATE_TYPE_YYYYMMDDWWhhmmss [NSArray arrayWithObjects:@"Y", @"M", @"D", @"W", @"h", @"m", @"s", nil] 
#define DATE_TYPE_YYYYMMDDhhmmssWW [NSArray arrayWithObjects:@"Y", @"M", @"D", @"h", @"m", @"s", @"W", nil] 
#define DATE_TYPE_FRIENDLY [NSArray arrayWithObjects:@"xx", nil] 

날짜 방법

는 값에서 날짜를 만들기

-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year { 
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; 

    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMonth:month]; 
    [dateFormatter setDateFormat:@"DD"]; 
    [dateComponents setDay:day]; 
    [dateFormatter setDateFormat:@"YYYY"]; 
    [dateComponents setYear:year]; 

    NSDate * result = [calendar dateFromComponents:dateComponents]; 

    return result; 
} 

-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year hour:(int)hour minute:(int)minute { 
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:[NSDate date]]; 

    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMonth:month]; 
    [dateFormatter setDateFormat:@"DD"]; 
    [dateComponents setDay:day]; 
    [dateFormatter setDateFormat:@"YYYY"]; 
    [dateComponents setYear:year]; 
    [dateFormatter setDateFormat:@"HH"]; 
    [dateComponents setHour:hour]; 
    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMinute:minute]; 

    NSDate * result = [calendar dateFromComponents:dateComponents]; 

    return result; 
} 

-(NSDate *) getDateWithMonth:(int)month day:(int)day year:(int)year hour:(int)hour minute:(int)minute second:(int)second { 
    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; 
    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]]; 

    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMonth:month]; 
    [dateFormatter setDateFormat:@"DD"]; 
    [dateComponents setDay:day]; 
    [dateFormatter setDateFormat:@"YYYY"]; 
    [dateComponents setYear:year]; 
    [dateFormatter setDateFormat:@"HH"]; 
    [dateComponents setHour:hour]; 
    [dateFormatter setDateFormat:@"MM"]; 
    [dateComponents setMinute:minute]; 
    [dateFormatter setDateFormat:@"SS"]; 
    [dateComponents setSecond:second]; 

    NSDate * result = [calendar dateFromComponents:dateComponents]; 

    return result; 
} 

날짜에서 문자열을 가져

-(NSString *) getStringFromDate:(NSDate *)date dateType:(NSArray *)dateType { 
    NSString * result = @""; 

    NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSString * format = @""; 

    NSDateComponents * dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; 

    NSInteger year = [dateComponents year]; 
    NSInteger month = [dateComponents month]; 
    NSInteger day = [dateComponents day]; 
    NSInteger weekday = [dateComponents weekday]; 
    NSInteger hour = [dateComponents hour]; 
    NSInteger minute = [dateComponents minute]; 
    NSInteger second = [dateComponents second]; 

    if (dateType != nil) { 
     for (int x = 0; x < [dateType count]; x++) { 
      if (x == ([dateType count]-1)) { 
       if ([[dateType objectAtIndex:x] isEqualToString:@"Y"]) { 
        format = [format stringByAppendingFormat:@"%d", year]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"M"]) { 
        format = [format stringByAppendingFormat:@"%d", month]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"D"]) { 
        format = [format stringByAppendingFormat:@"%d", day]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"W"]) { 
        format = [format stringByAppendingFormat:@"%d", weekday]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"h"]) { 
        format = [format stringByAppendingFormat:@"%d", hour]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"m"]) { 
        format = [format stringByAppendingFormat:@"%d", minute]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"s"]) { 
        format = [format stringByAppendingFormat:@"%d", second]; 
       } 
      } else { 
       if ([[dateType objectAtIndex:x] isEqualToString:@"Y"]) { 
        format = [format stringByAppendingFormat:@"%d|", year]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"M"]) { 
        format = [format stringByAppendingFormat:@"%d|", month]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"D"]) { 
        format = [format stringByAppendingFormat:@"%d|", day]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"W"]) { 
        format = [format stringByAppendingFormat:@"%d|", weekday]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"h"]) { 
        format = [format stringByAppendingFormat:@"%d|", hour]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"m"]) { 
        format = [format stringByAppendingFormat:@"%d|", minute]; 
       } else if ([[dateType objectAtIndex:x] isEqualToString:@"s"]) { 
        format = [format stringByAppendingFormat:@"%d|", second]; 
       } 
      } 

      if ([[dateType objectAtIndex:x] isEqualToString:@"xx"]) { 
       format = [NSString stringWithFormat:@"Year: %d, Month: %d, Day: %d, Weekday: %d, Hour: %d, Minute: %d, Second: %d", year, month, day, weekday, hour, minute, second]; 
      } 
     } 
    } else { 
     format = [format stringByAppendingFormat:@"%d|", year]; 
     format = [format stringByAppendingFormat:@"%d|", month]; 
     format = [format stringByAppendingFormat:@"%d|", day]; 
     format = [format stringByAppendingFormat:@"%d|", weekday]; 
     format = [format stringByAppendingFormat:@"%d|", hour]; 
     format = [format stringByAppendingFormat:@"%d|", minute]; 
     format = [format stringByAppendingFormat:@"%d|", second]; 

     format = [NSString stringWithFormat:@"%d|%d|%d|%d|%d|%d|%d", year, month, day, weekday, hour, minute, second]; 
    } 

    result = format; 

    return result; 
} 

NSDate * date = [self getDateWithMonth:12 day:24 year:1994]; 
NSString * dateInString = [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY]; 

int month = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:0] intValue]; 
int day = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:1] intValue]; 
int year = [[[dateInString componentsSeparatedByString:@"|"] objectAtIndex:2] intValue]; 

NSLog(@"String of Date: \"%@\"", dateInString); 
NSLog(@"Month: %d", month); 
NSLog(@"Day: %d", day); 
NSLog(@"Year: %d", year); 

당신의 문자열을 얻을 수 [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY]을 사용할 수 있도록, 읽기 일반적으로 하드 인 NSDate 객체를 반환 [self getDateWithMonth:12 day:24 year:1994] 방법 NSDate 개체

정의 (매크로)를 사용하여 문자열에 넣으려는 날짜의 형식을 지정하십시오. 예를 들어

: DATE_TYPE_hhmmssMonth|Day|Year, DATE_TYPE_MMDDYYYYhhmmss 돌아올 것이 Hour|Minute|Second, DATE_TYPE_MMDDYYYY이 반환 반환 것 Month|Day|Year|Hour|Minute|Second, DATE_TYPE_MMDDYYYYWWhhmmssMonth|Day|Year|Weekday (#)|Hour|Minute|Second

등등 ...

콘솔 반환 기록

2012-04-29 13:42:15.791 Atomic Class[1373:f803] String of Date: "12|24|1994" 
2012-04-29 13:42:15.793 Atomic Class[1373:f803] Month: 12 
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Day: 24 
2012-04-29 13:42:15.794 Atomic Class[1373:f803] Year: 1994 
관련 문제