How to get the component of the day from NSDate?

I have an NSDate object and it takes an integer day. those. if we have May 25, 2010, int should be 25. Is there an easy way to do this?

+4
source share
5 answers

Please note that NSDate is just a timestamp and only has a “day” when considering this calendar and time zone. If you need a Gregorian calendar in the current time zone,

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

If you want UTC day, set tz = nil .

In addition, CFAbsoluteTime and NSDate (as far as I know) are based on POSIX time, which indicates a day of 86400 seconds and therefore does not process jump seconds.

+3
source

Please review this post on how to get calendar components with NSDate . Essentially, it will look something like this:

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

(Don't forget about memory management for the above.)

+18
source

If you only need the "25" part of NSDate, you can get it from dateFormatter.

Sort of:

 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); 
+5
source

Use "EEEE" as the format for the full name of the day.

Use "EEE" as the short name format for the day.

Example:

 - (NSString *)getDayOfTheWeek:(NSDate *)date{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init] ; [dateFormatter setDateFormat:@"EEEE"]; NSString *formattedDateString = [dateFormatter stringFromDate:date]; return formattedDateString; } 
+2
source

I had this problem a while ago, and I created the following methods to make things simpler.


Definitions

 #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] 

Date Methods

Create date from values

 -(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; } 

Get string from day

 -(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; } 

Example

 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); 

The [self getDateWithMonth:12 day:24 year:1994] NSDate returns an NSDate that is usually hard to read, so you can use [self getStringFromDate:date dateType:DATE_TYPE_MMDDYYYY] to get the string of the NSDate .

Use definitions (macros) to specify the format of the date you would like to receive in the string.

For example: DATE_TYPE_hhmmss will return Hour|Minute|Second , DATE_TYPE_MMDDYYYY will return Month|Day|Year , DATE_TYPE_MMDDYYYYhhmmss will return Month|Day|Year|Hour|Minute|Second , DATE_TYPE_MMDDYYYYWWhhmmss Month|Day|Year|Weekday (#)|Hour|Minute|Second

etc.

Console log

 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 
-1
source

Source: https://habr.com/ru/post/1310884/


All Articles